找数达人
来源:互联网 发布:剑网三萝莉脸型数据图 编辑:程序博客网 时间:2024/04/25 15:27
找数达人
时间限制: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]==n)return 1;}}return dp[n]==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;}
0 0
- 找数达人
- 找数达人
- 找数达人
- 找数达人
- NYOJ1221找数达人
- 找数达人 nyoj1221
- NYOJ 1221 找数达人
- 找数达人 01背包
- NYOJ 1221 找数达人(01背包)
- NYOJ 1221找数达人(背包问题)
- 南阳理工1221 找数达人(01背包)
- NYOJ 找数达人 (找n个数构成m是否存在)
- 找数达人(n个数的和等于一个定值)
- 用c实现南阳oj1221 找数达人 01背包问题。
- 杨辉三角_java_HDU2032
- 内存管理
- SSL/TLS双向认证实现(JAVA、TOMCAT)
- Fine-Grained Histopathological Image Analysis via Robust Segmentation and Large-Scale Retrieval文章总结
- 分离各位数
- 找数达人
- UIImage类目-返回一张拉伸的图片、自动设配6 7
- Linux内核驱动之自动创建设备文件
- 第五课 一致变量
- 英语学习--chap16 从属从句简化通则
- 牛腩新闻发布系统-验证码搞通了吗?详细注释-秒懂!
- IT程序员及相关领域的好书推荐
- 网卡只有发送,没有接收
- Winows 8 激活方法