hdu1258(dfs)
来源:互联网 发布:淘宝主页设计 编辑:程序博客网 时间:2024/06/03 05:55
题目链接:Sum It Up
题目大意:给出一组数a[n]={x1,x2,x3...xn}和t,求出a[n]的子集使得子集中的元素之和=t
每个数只能使用一次,不能输出重复的子集
分析:简单dfs,vis判断某个数是否使用过
!!!注意不能输出两个相同的子集,即某个数不能再相同的位置使用两次
用last记录上次此位置使用的数,若相同则跳过
#include <stdio.h>#include <memory.h>const int maxn=15;int a[maxn],vis[maxn],t,n;bool flag;void dfs(int i,int sum){ if(i==n+1)return; if(sum>t)return; if(sum==t){ flag=true; bool atag=false; for(int k=0;k<i;k++){ if(vis[k]){ if(atag)printf("+"); else { atag=true; } printf("%d",a[k]); } } printf("\n"); } int last=-1; for(int k=i;k<n;k++){ if(!vis[k]&&last!=a[k]){ last=a[k]; vis[k]=true; dfs(k+1,sum+a[k]); vis[k]=false; } }}int main(){ //freopen("in.txt","r",stdin); while(scanf("%d %d",&t,&n)!=EOF&&(t+n)){ flag=false; for(int i=0;i<n;i++)scanf("%d",&a[i]); memset(vis,0,sizeof(vis)); printf("Sums of %d:\n",t); dfs(0,0); if(!flag)printf("NONE\n"); } return 0;}
0 0
- hdu1258(dfs)
- hdu1258/poj1564 dfs
- hdu1258 DFS+回溯
- hdu1258(DFS)
- hdu1258 dfs深搜
- HDU1258:Sum It Up(DFS)
- hdu1258 Sum It Up (DFS)
- Sum It Up(hdu1258,dfs)
- HDU1258:Sum It Up(DFS)
- HDU1258:Sum It Up(DFS)
- DFS hdu1258 Sum It Up
- HDU1258 Sum It Up(DFS)
- hdu1258
- hdu1258
- HDU1258
- HDU1258
- hdu1258
- ACM-DFS之SumItUp——hdu1258
- nlp基础科普(一)
- Cucumber高阶用法 —— 活用Cucumber测试服务端开放API
- 练习
- 微信开发之刷卡支付
- java.lang.ref.FinalizerReference引发的内存泄漏
- hdu1258(dfs)
- 关于使用Session/Cookie存中文乱码造成的问题解决方案
- MySQL管理之道——学习笔记
- CS231n作业笔记2.6:卷积层以及池化层的实现
- 命令模式---是谁拿了我的遥控器
- java 中的小技巧
- 微信开发之现金红包
- VC++、MFC最好的开源项目
- 写出健壮的 Bash 脚本