找数达人
2015-07-26 21:20
267 查看
找数达人
时间限制:1000 ms | 内存限制:65535 KB描述 简单的题意如下:小明最近做出了一道题:如何在一组数中寻找三个数,这三个数的和等于一给出的定值m,洋洋得意。于是小华不乐意了,别问为什么...,于是小华说,你能找找在一组数字中是否有n个数,使得这n个数的和等于一给定的定值m吗? 1): 0 < n <= 10000 2): 0 < 序列长度 <= 10000 3): 0 <= m <=10000 4): 0 <= 数组中的数 <=10000还有比这更简单易懂的题目吗???输入多组数据,每组两行,第一行为序列内容,第二行为m的值。输出如能找到,输出Yes,否则,输出No。样例输入1 3 4 5
5
1 3 4 5 9
2样例输出
Yes
No
这题就是0-1背包问题,难点在于它的数据输入。
AC代码:
#include<iostream>#include<algorithm>#include<cstring>#include<cstdio>using namespace std;const int T = 0x3f3f3f3f;long long a[2000010],dp[2000010];int Solve(int n,int m){for(int i=0;i<m;++i){if(n<a[i])return 0;for(int j=n;j>=a[i];--j){dp[j]=min(dp[j],dp[j-a[i]]+a[i]);if(dp==n)return 1;}}return dp==n?1:0;}void INIT(int n){for(int i=0;i<=n;++i){dp[i]=T;}dp[0]=0;}int main(){/*freopen("input.txt","r",stdin);*/char c;int n,m=0,x=0;while(~(c=getchar())){if(c>='0'&&c<='9')x=x*10+c-'0';else if(c==' '){a[m++]=x;x=0;}else{a[m++]=x;scanf("%d",&n);if(n==0)printf("No\n");else{INIT(n);sort(a,a+m);if(Solve(n,m)>0)printf("Yes\n");elseprintf("No\n");}x=0;m=0;cin.get();}}return 0;}
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- 关于指针的一些事情
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- Lua中调用C++函数示例
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- C++联合体转换成C#结构的实现方法
- C++编写简单的打靶游戏
- C++ 自定义控件的移植问题
- C++变位词问题分析
- C/C++数据对齐详细解析
- C++基于栈实现铁轨问题
- C++中引用的使用总结
- 使用Lua来扩展C++程序的方法
- C++中调用Lua函数实例
- Lua和C++的通信流程代码实例
- C与C++之间相互调用实例方法讲解
- C++ Custom Control控件向父窗体发送对应的消息
- C++中拷贝构造函数的应用详解