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;
}
浙公网安备 33010602011771号