【原創】POJ 1703 && RQNOJ 能量項鏈解題報告

來源:互聯網
上載者:User

標籤:io   ar   for   sp   art   代碼   amp   ef   bs   

不想說什麼了

 

poj 1703,從看完題到寫完第一個版本的代碼,只有15分鐘

然後一直從晚上八點WA到第二天早上

最後終於發現了BUG,題目要求的“Not sure yet.”,我打成了“No sure yet.”

 

然後是RQNOJ的NOIP真題,經典的能量項鏈

從看完題到寫完偽碼用了30分鐘,敲完全部代碼用了10分鐘

WA 了7次,次次只能過前三個點,後面全部逾時。

 

不能夠啊?我動態規划了都,怎麼可能逾時?

開始最佳化主函數。

發現通過一個比較,能把N * (N-1)的複雜度降到C(N,2)。

改了後提交,很好,多過了一個點,繼續逾時

 

XXXX,我最後發現,居然在遞迴函式中漏寫了if(dp[start][end] != 0)return dp[start][end];!!

當時心中真的是一萬匹草泥馬碾壓而過,還我青春啊!

 

然後全部10ms內AC了10個點

 

最後上這兩個冤家的代碼

加起來送了我10+個WA了吧?

好險我是學法的

 

POJ 1703:

 

#include <stdio.h>
typedef struct man
{
  int rev;
  int parent;
}man;
man set[100008];
int set_find(int p)
{
    if(p < 0)return -1;
    if(set[p].parent < 0)return p;
    return set[p].parent = set_find(set[p].parent);
}
void join(int p,int q)
{
    p = set_find(p);
    q = set_find(q);
    if(p != q)set[p].parent = q;
}
void deal(int p,int q)
{
    int tmp_rev1;
    int tmp_rev2;
    if(set[q].rev == -1)set[q].rev = p;
    if(set[p].rev == -1)set[p].rev = q;
    tmp_rev1 = set_find(set[p].rev);
    tmp_rev2 = set_find(set[q].rev);
    p = set_find(p);
    q = set_find(q);
    if(q != tmp_rev1)join(q,tmp_rev1);
    if(p != tmp_rev2)join(p,tmp_rev2);
}
void searchSet(int p,int q)
{
    p = set_find(p);
    q = set_find(q);
    if(p == q)
    {
        printf("In the same gang.\n");
    }
    else if(p == set_find(set[q].rev) || q == set_find(set[p].rev))
    {
        printf("In different gangs.\n");
    }
    else printf("Not sure yet.\n");
}
int main(void)
{
    int T;
    int N,M,i;
    int CASE;
    int num1,num2;
    char command;
    scanf("%d",&T);
    while(T --)
    {
        scanf("%d%d",&N,&M);
        if(N == 2)CASE = 1;
        else CASE = 0;
        for(i = 0;i <= N;i++)
        {
                set[i].parent = -1;
                set[i].rev = -1;
        }
        for(i = 0;i < M;i++)
        {
            getchar();
            command = getchar();
            scanf("%d%d",&num1,&num2);
            if(!CASE)
            {
                if(command == ‘A‘)
                {
                    searchSet(num1,num2);
                }
                else if(command == ‘D‘)
                {
                    deal(num1,num2);
                }
            }
            else printf("In different gangs.\n");
        }

    }
    return 0;
}

 

 

RQNOJ 能量項鏈:

 

#include <stdio.h>
int dp[200][200];
int value[200];
int N;
int pre(int a)
{
    if(a == 0)return N - 1;
    else return a - 1;
}
int next(int a)
{
    if(a == N - 1)return 0;
    else return a +  1;
}
int fun(int start,int end)
{
    int tmp1,tmp2,i,j,max = 0,result;
    if(dp[start][end] != 0)return dp[start][end];
    if(start == end)return 0;
    for(i = start;i != end;i = next(i))
    {
                tmp1 = fun(start,i);
                tmp2 = fun(next(i),end);
                result = tmp1 + tmp2 + value[start] * value[next(i)] * value[next(end)];
                if(max < result)max = result;
    }
    return dp[start][end] = max;
}
int main(void)
{
    int i,j,result;
    int max,tmp1,tmp2;
    scanf("%d",&N);
    for(i = 0;i < N;i++)
        scanf("%d",&value[i]);
    max = 0;
    int count = 0;
    int size;
    for(i = 0;i < N;i++)
    {
        size = N - i - 1;
        count = 0;
        for(j = i;count < size;j = next(j),count++)
        {
            tmp1 = fun(i,j);
            tmp2 = fun(next(j),pre(i));
            if(value[next(j)] < value[i])
                result = tmp1 + tmp2 + value[i] * value[next(j)] * value[i];
            else result = tmp1 + tmp2 + value[next(j)] * value[next(j)] * value[i];
            if(max < result)max = result;
        }
    }
    printf("%d\n",max);
    return 0;
}

【原創】POJ 1703 && RQNOJ 能量項鏈解題報告

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.