南邮 OJ 1276 子集和问题
来源:互联网 发布:淘宝客关键词选择 编辑:程序博客网 时间:2024/06/05 10:24
子集和问题
时间限制(普通/Java) : 1000 MS/ 3000 MS 运行内存限制 : 65536 KByte
总提交 : 60 测试通过 : 5
总提交 : 60 测试通过 : 5
比赛描述
子集和问题的一个实例为〈S,t〉。其中,S={ 1 x , 2 x ,…, n x }是一个正整数的集合,c是一个正整数。子集和问题判定是否存在S的一个子集S1,使得 ,试设计一个解子集和问题的回溯法。
对于给定的正整数的集合S={ x 1, x 2,…,x n }和正整数c,编程计算S 的一个子集S1,使得。
输入
由文件input.txt 提供输入数据。文件第1 行有2 个正整数n 和c,n 表示S 的大小,c是子集和的目标值。接下来的1 行中,有n 个正整数,表示集合S 中的元素。
输出
输出共有10行,在第k行输出页码中用到数字k-1 的次数,k=1,2,…,10。
样例输入
5 10
2 2 6 5 4
样例输出
2 2 6
提示
undefined
题目来源
算法设计与实验题解
/*// TL3#include<iostream>#define MAX_N 1001int n,c,a[MAX_N];bool selected[MAX_N];bool makeSum(int i, int sum){if(sum==0){return 1;}if(sum<0 || i>=n){return 0;}selected[i] = 1;if(makeSum(i+1,sum-a[i])){return 1;}selected[i] = 0;if(makeSum(i+1,sum)){return 1;}return 0;}int main(){int i;scanf("%d%d",&n,&c);for(i=0;i<n;i++){scanf("%d",a+i);}if(makeSum(0,c)){for(i=0;i<n;i++){if(selected[i]){printf("%d ",a[i]);}}printf("\n");}else{printf("No Solution!");}}*//* Wrong Answer at Test 11#include<iostream>#define MAX_N 1001int n,c,a[MAX_N],s[MAX_N];bool selected[MAX_N];bool makeSum(int i, int sum){if(sum==0){return 1;}if(sum<0 || i>=n || (i<n-1 && sum>s[i+1])){return 0;}selected[i] = 1;if(makeSum(i+1,sum-a[i])){return 1;}selected[i] = 0;if(makeSum(i+1,sum)){return 1;}return 0;}int main(){int i;scanf("%d%d",&n,&c);for(i=0;i<n;i++){scanf("%d",a+i);}s[n-1]=a[n-1];for(i=n-2;i>=0;i--){s[i] = s[i+1]+a[i];}if(makeSum(0,c)){for(i=0;i<n;i++){if(selected[i]){printf("%d ",a[i]);}}printf("\n");}else{printf("No Solution!");}}*/#include<iostream>#define MAX_N 2001int n,c,a[MAX_N],s[MAX_N];bool selected[MAX_N];bool makeSum(int i, int sum){if(sum==0){return 1;}if(sum<0 || i>=n || (i<n-1 && sum>s[i+1])){//剪枝很重要return 0;}selected[i] = 1;if(makeSum(i+1,sum-a[i])){return 1;}selected[i] = 0;if(makeSum(i+1,sum)){return 1;}return 0;}int main(){int i;scanf("%d%d",&n,&c);for(i=0;i<n;i++){scanf("%d",a+i);}s[n-1]=a[n-1];for(i=n-2;i>=0;i--){s[i] = s[i+1]+a[i];}if(makeSum(0,c)){for(i=0;i<n;i++){if(selected[i]){printf("%d ",a[i]);}}printf("\n");}else{printf("No Solution!");}}
0 0
- 南邮 OJ 1276 子集和问题
- 南邮 OJ 1307 子集树问题
- 南邮 OJ 1325 子集树问题
- 子集和问题
- 子集和问题
- 子集和问题
- 8603 子集和问题
- 子集和问题
- 子集和问题
- 子集和问题
- 子集和问题
- 子集和问题
- 子集和问题
- 子集和问题
- 子集和问题
- 8603 子集和问题
- 子集和问题
- 子集和问题
- weblogic安装问题
- 网站优化之网站结构诊断技巧
- 推荐一个Mac上的工具 Alfred
- RandomAccessFile读写文件字符
- Android 实现断点续传
- 南邮 OJ 1276 子集和问题
- 左右对齐,form-inline样式的使用
- iptables详解
- jiasig cas 4.0注销后返回登录页面的实现
- HttpURLConnection和AndroidHttpClient
- 网页哀思版(滤镜)
- UVA375等腰三角行无限内切圆面积
- 一个简单的ExpandableView例子
- php spl之迭代器iterator