pku1543 Perfect Cubes(完全不用剪枝)

//四重循环,32MS

#include <stdio.h>

#define MAXN 101

int main()
{
    int N,a,b,c,d,sum,pow3[MAXN];
    for(int i=1; i<MAXN; i++) pow3[i]=i*i*i;
    while(scanf("%d",&N)!=EOF)
    {
        for(a=6; a<=N; a++)
            for(b=2; b<N; b++)
                for(c=b; c<N; c++)
                    for(d=c; d<N; d++)
                    {
                        sum=pow3[b]+pow3[c]+pow3[d];
                        if(sum==pow3[a])
                            printf("Cube = %d, Triple = (%d,%d,%d)\n",a,b,c,d);
                        else if(sum>pow3[a]) break;
                    }
    }
    return 0;
}


//**********************************************************************************

//深搜:64MS

#include <stdio.h>

#define MAXN 101
#define MAXIDX 4

int sum,N,a,pow3[MAXN],ans[MAXIDX];

void dfs(int idx,int val)
{
    int j;
    if(idx==MAXIDX)
    {
        if(pow3[ans[1]] + pow3[ ans[2] ] + pow3[ ans[3] ] == sum)
            printf("Cube = %d, Triple = (%d,%d,%d)\n",a,ans[1],ans[2],ans[3]);
        return;
    }
    if( pow3[ans[1]] + pow3[ ans[2] ] + pow3[ ans[3] ] > sum )
        return;
    for(j=val; j<N; j++)
    {
        ans[idx]=j;
        dfs( idx+1,j );
        ans[idx]=2;
    }
}

int main()
{
    for(int i=1; i<MAXN; i++) pow3[i]=i*i*i;
    while(scanf("%d",&N)!=EOF)
    {
        for(a=6; a<=N; a++)
        {
            ans[1]=ans[2]=ans[3]=2;
            sum=pow3[a];
            dfs( 1,2 );
        }
    }
    return 0;
}

 

posted @ 2010-08-21 22:06  菜到不得鸟  阅读(145)  评论(0)    收藏  举报