hdu 1258 Sum It Up
2013-05-24 00:45
253 查看
很明显的dfs,input是按照非递减的顺序的,所以不用排序。
麻烦之处在于怎样不输出重复的,比如 2 3 2 2 2 只需要输出一个2就够了
麻烦之处在于怎样不输出重复的,比如 2 3 2 2 2 只需要输出一个2就够了
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; int a[15],sum,n; bool vis[15]; int flag; void out() { int f=1; flag=1; for(int i=1;i<=n;i++) { if(!vis[i]) continue; if(f) {printf("%d",a[i]);f=0;} else printf("+%d",a[i]); } printf("\n"); } bool dfs(int pos,int tot) { if(tot==sum) { out(); return 1; } for(int i=pos;i<=n;i++) { if(tot+a[i]<=sum&&!vis[i]) { vis[i]=1; dfs(i+1,tot+a[i]); vis[i]=0; while(i<n&&a[i]==a[i+1]) //a[i]这个数字已经搜索过,再出现的话直接跳过 i++; } } return 0; } int main() { while(scanf("%d%d",&sum,&n)&&(sum||n)) { flag=0; for(int i=1;i<=n;i++) { scanf("%d",&a[i]); vis[i]=0; } printf("Sums of %d:\n",sum); memset(vis,0,sizeof(vis)); dfs(1,0); if(!flag) printf("NONE\n"); } return 0; }
相关文章推荐
- Poj 1564 || HDU 1258 Sum It Up(dfs+技巧)
- HDU 1258 Sum It Up (dfs)
- sum it up hdu 1258
- HDU1258 Sum It Up
- HDu 1258 Sum It Up (还是DFS)
- HDU 1258 Sum It Up
- 【DFS】poj 1564 Sum It Up(hdu 1258)
- HDU 1258-Sum It Up(dfs)
- hdu 1258 Sum It Up(dfs)
- HDU 1258 Sum It Up
- HDU 1258 Sum It Up
- [置顶] hdu-1258 Sum It Up(dfs+去重)
- HDU 1258 Sum It Up (DFS)
- Sum It Up hdu 1258
- HDU 1258-Sum It Up
- (step4.3.4)hdu 1258(Sum It Up——DFS)
- hdu 1258 Sum It Up
- hdu 1258 Sum It Up
- HDU 1258 Sum It Up(哈希表判重)
- hdu 1258 Sum It Up