[USACO2.3.3][zerosum零的算式和][dfs]
[USACO2.3.3][zerosum零的算式和][dfs]
代码:
#include
#include
#include
int n;
void
dfs(int a,int b,int ans[10])
{
int i;
if(b==n-1){
ans[b]=a;
int sum=1,last=1;
for(i=1;i<=n-1;i++){
if(ans[i]==1){
if(last<0){
sum=sum-last+last*10-(i+1);
last=last*10-(i+1);
}
if(last>=0){
sum=sum-last+last*10+(i+1);
last=last*10+(i+1);
}
}
if(ans[i]==2){
last=i+1;
sum=sum+last;
}
if(ans[i]==3){
last=-i-1;
sum=sum+last;
}
}
if(sum==0){
printf("1");
for(i=2;i<=n;i++){
if(ans[i-1]==1)printf(" %d",i);
if(ans[i-1]==2)printf("+%d",i);
if(ans[i-1]==3)printf("-%d",i);
}
printf("\n");
}
return;
}
ans[b]=a;
for(i=1;i<=3;i++){
dfs(i,b+1,ans);
}
return;
}
int main()
{
int ans[10]={0};
int i;
scanf("%d",&;;;;n);
for(i=1;i<=3;i++){
dfs(i,1,ans);
}
system("pause");
return 0;
}
思路:普通的dfs三层,不超时。
主要需要考虑的是最后的判断。计算。

浙公网安备 33010602011771号