POJ 1564 && HDU 1258 Sum It Up(非递增的DFS)

    技术2024-11-19  10

     给出数 n,k ,再给出 n 个非递增的数,输出所有的可能使几个数的和等于 k 的表达式

    const int N=100+5; int n,m,t; int i,j,k; int a[N]; bool vis[N],flag; int ans[N]; void DFS(int cur,int num,int sum) { if(sum==k){ for(int i=0;i<num;i++){ if(i) printf("+%d",ans[i]); else printf("%d",ans[i]); } puts(""); flag=1; return ; } for(int i=cur;i<n;i++){ if((i==cur || a[i]!=a[i-1]) && sum+a[i]<=k){ //形如 aaaabbb,则取第一个 a/b,判重 ans[num]=a[i]; DFS(i+1,num+1,sum+a[i]); } } } int main() { //IOS; int num=0; while(sdd(k,n)==2,k){ for(i=0;i<n;i++) cin>>a[i]; ms(vis,0); printf("Sums of %d:\n",k); flag=0; DFS(0,0,0); if(!flag) puts("NONE"); } //PAUSE; return 0; }

     

    Processed: 0.013, SQL: 9