ZOJ1711
来源:互联网 发布:大数据方案 编辑:程序博客网 时间:2024/06/05 19:38
题意:给出一个数n 和a1....ak 问这k个数有多少种相加为n的方法,不能重复
题解:DFS记录答案,暴力判重
#include<bits/stdc++.h>using namespace std;int n,m;int ans,f[2000][20],tem[20];vector<int>a;void dfs(int sum,int k,int num){ if (sum==n || k==m ) { if (sum==n) { ans++; for (int i=1;i<=num;i++) f[ans][i]=tem[i]; f[ans][0]=num; } return; } if (sum+a[k]<=n) { tem[num+1]=a[k]; dfs(sum+a[k],k+1,num+1); } dfs(sum,k+1,num);}void Gao(){ memset(f,0,sizeof(f)); memset(tem,0,sizeof(tem)); a.clear(); ans=0; for (int i=0;i<m;i++) { int x; cin>>x; a.push_back(x); } sort(a.begin(),a.end()); m=a.size(); reverse(a.begin(),a.end()); dfs(0,0,0); if (ans==0) { cout<<"NONE"<<endl; return ; } else { for (int i=1;i<=ans;i++) { bool ok=true; for (int j=1;j<i;j++) { bool same=true; if (f[i][0]!=f[j][0]) continue; for (int k=1;k<=f[i][0];k++) { if (f[i][k]!=f[j][k]) same=false; } if (same) ok=false; } if (ok) { for (int k=1;k<=f[i][0];k++) printf(k==1?"%d":"+%d",f[i][k]); cout<<endl; } } }}int main(){ while (cin>>n>>m &&n) { printf("Sums of %d:\n",n); Gao(); } return 0;}
0 0
- ZOJ1711
- zoj1711
- zoj1711-Sum It Up
- zoj1711 dfs搜索+去重
- HDU1258&&ZOJ1711-Sum It Up
- HDU1258&&ZOJ1711-Sum It Up
- ZOJ1711-sum it up(DFS+去重)
- ZOJ1711 POJ1564 Sum It Up,DFS+输出排序+去重复
- Bogo排序
- 【ORACLE】RMAN实现数据迁移
- Sprite Kit 案例
- Cocos2dx中CCScrollview的修改方案探讨
- spring容器重复初始化
- ZOJ1711
- gnome-logs开发记录2--合并git的多个commit--Gnome开发记录
- 快速排序
- 【坑】javascript中使用window对象中的moveBy无效的问题
- COCOS2DX中对CCUserDefault保存的数据加密
- long型十进制转换为十六进制 和 十六进制转换为十进制
- Ubuntu12.04通过xinput禁用及启用联想笔记本的触摸板
- 用Latex制作一个简洁美观的简历(菜鸟快速上手)
- atitit.ajax 最佳实践跟框架选型 o99