URL: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1204
去年暑假做的题,再拿来看看……
//多背包求和问题 #include"stdio.h" int s[30],p[30],flag,k,m;//s[]存输入数据,p[]标记,flag标记,k深度,m广度 void output(int sum)//输出函数 { int f,i; f=0; for(i=0;i=m-1)//如果是最后一个则返回 return; if(sum+s[pos]>s[m-1])//优化,如果相加后的值,大于最后一个值则返回 return; else { if(sel==k-1)//如果满足相加的位数等于要求的位数少一位时 { p[pos]=1; for(i=pos+1;is[j]) { temp=s[i]; s[i]=s[j]; s[j]=temp; } temp=0;//初始化 for(i=0;is[m-1]) { h=i; break; } } flag=0;//初始化 for(k=2;k<=h;k++) { add(0,0,0);//调用add()函数 } if(flag==0)//如果每次测试的所有数据都不成立 printf("Can't find any equations./n"); printf("/n"); } return 0; } /* Sample Input 3 3 1 2 3 3 1 2 5 6 1 2 3 5 4 6 Output for the Sample Input 1+2=3 Can't find any equations. 1+2=3 1+3=4 1+4=5 1+5=6 2+3=5 2+4=6 1+2+3=6 */