POJ 1564 Sum It Up(DFS)
来源:互联网 发布:win10网络优化 编辑:程序博客网 时间:2024/04/28 17:56
题目链接:
POJ 1564 Sum It Up
题意:
给你一个非递增数组,输出由数组中的数字组合的相加和等于给定t的所有可能组合。
每个组合内部按照非递增顺序输出,每个组合按照首数字从大到小排序,首数字相同比较第二个数字,依次类推。
分析:
输出要求按照DFS的搜索顺序存储输出即可。
DFS过程中需要记录有哪些数字被使用了,以及当前和,当前遍历的数字编号。
注意判重。
CODE:
//816K 0MS#include <iostream>#include <cstdio>#include <cstring>#include <cmath>#include <cstring>using namespace std;const int maxn=15;int t,n,tot;int ans[30000][maxn],a[maxn],vis[maxn],b[maxn],cnt[30000];void dfs(int k,int sum)//计算到下标为k,包括a[k]在内的和为sum{ if(sum==t) { int tmp=0; for(int i=0;i<=k;i++) { if(vis[i]) b[tmp++]=a[i]; }//记录当前和的组成 int ok=0; for(int i=0;i<tot;i++) { if(cnt[i]==tmp) { int flag=0; for(int j=0;j<tmp;j++) { if(ans[i][j]!=b[j]) { flag=1; break; } } if(flag==0) ok=1;//完全相同 if(ok) break; } } if(ok) return;//重复了 for(int i=0;i<tmp;i++) ans[tot][i]=b[i]; cnt[tot]=tmp; tot++; return; } if(k==n) return; for(int i=k+1;i<n;i++) { vis[i]=1; dfs(i,sum+a[i]); vis[i]=0; }}int main(){#ifdef LOCAL freopen("in.txt","r",stdin);#endif while(~scanf("%d%d",&t,&n)) { if(t==0&&n==0) break; for(int i=0;i<n;i++) scanf("%d",&a[i]); memset(cnt,0,sizeof(cnt)); tot=0; for(int i=0;i<n;i++) { memset(vis,0,sizeof(vis)); vis[i]=1; dfs(i,a[i]); } printf("Sums of %d:\n",t); if(tot==0) printf("NONE\n"); else { for(int i=0;i<tot;i++) { for(int j=0;j<cnt[i];j++) { if(j) printf("+"); printf("%d",ans[i][j]); } printf("\n"); } } } return 0;}
0 0
- POJ 1564 Sum It Up(DFS)
- POJ 1564 Sum It Up(DFS)
- POJ 1564 Sum It Up dfs
- poj 1564 Sum It Up -- DFS 递归
- poj 1564 dfs(Sum It Up)
- POJ 1564--Sum It Up【DFS】
- poj 1564 Sum It Up DFS
- POJ 1564 Sum It Up (DFS+剪枝)
- POJ 题目1564 Sum It Up(DFS,去重)
- POJ 1564 && HDU 1258 Sum It Up(dfs)
- POJ 1564 Sum It Up -dfs(回溯法)
- Sum It Up(DFS)
- zoj 1711 || poj 1564 Sum It Up(DFS~~~去重~)
- POJ 1564 Sum It Up——DFS
- 【DFS】poj 1564 Sum It Up(hdu 1258)
- Sum It Up POJ 1564 HDU 杭电1258【DFS】
- POJ 1564 - Sum It Up
- poj 1564 Sum It Up
- ImageView设置background和src的区别
- 阿里云的Linux ECS云主机切换PHP版本
- #include<sys/stat.h>
- 线程同步的方法
- qlabel 详解
- POJ 1564 Sum It Up(DFS)
- BChdoj5150&&hdoj5158&&hdoj5159&&hdoj5135&&hdoj5163
- HDU3183 A Magic Lamp(线段树)
- HDU 1018 big number
- 用位运算实现四则运算之加减乘除(用位运算求一个数的1/3)
- C语言中.h文件和.c文件详细解析 此博文包含图片
- Android学习笔记----HttpURLConnection 和 HttpClient(已经被废弃)
- 固化程序
- 优盘安装系统(附Key)