在一组数字中是否有n个数,使得这n个数的和等于一给定的定值m

【题目分析】在一组数字中是否有n个数,使得这n个数的和等于一给定的定值m。

【思路分析】:分析数据的情况下:

1): 0 < n <= 1000002): 0 < 序列长度 <= 1000003): 0 <= m <=100000

数据小的话:用类似于dp的思路,,

代码:

#include <stdio.h>#include <string.h>#include <algorithm>#include <iostream>using namespace std;#define rep(i,j,k) for(int i=(int)j;i<(int)k;++i)#define per(i,j,k) for(int i=(int)j;i>(int)k;–i)#define lowbit(a) a&-a#define Max(a,b) a>b?a:b#define Min(a,b) a>b?b:a#define mem(a,b) memset(a,b,sizeof(a))typedef long long LL;typedef unsigned long long LLU;typedef double db;const int N=1e5+10;const int inf=0x3f3f3f3f;int t,n,m;int pre[N],last[N];int num[N];int main(){int x=0;char ch;int sum=1;mem(last,0);while(~(ch=getchar())){if(isdigit(ch)) x=x*10+ch-'0';else if(ch!='\n'){pre[sum++]=x;x=0;}else{pre[sum++]=x;mem(last,0);last[0]=1;m=read();for(int i=1; i<sum; ++i){for(int j=m; j>=0; –j){int k=pre[i]+j;if(last[j]&&k<=m) last[k]=1;//cout<<"k="<<k<<" "<<"last[k]"<<last[k]<<endl;}}if(last[m]) puts("Yes");else puts("No");x=0;sum=1;mem(last,0);}}return 0;}

生命中,每一种苦难的背后都有一片晴朗的天空

在一组数字中是否有n个数,使得这n个数的和等于一给定的定值m

相关文章:

你感兴趣的文章:

标签云: