标签:字符串
【题目分析】在一组数字中是否有n个数,使得这n个数的和等于一给定的定值m。
【思路分析】:分析数据的情况下:
1): 0 < n <= 100000
2): 0 < 序列长度 <= 100000
3): 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
标签:字符串
原文地址:http://blog.csdn.net/u013050857/article/details/47057513