首页 > 代码库 > hdu 4104
hdu 4104
先排序,再动态规划,需要优化
#include<iostream> #include<cstdio> #include<cstring> #include<string> #include<map> #include<algorithm> using namespace std; const int maxn = 1e3+10; const int maxm = 1e6+10; int a[maxn]; int f[maxm]; int main() { int N, k, i, j, m; while(scanf("%d", &N)!=EOF) { memset(f, 0, sizeof(f)); for(i = 0; i < N; i ++) scanf("%d", &a[i]); sort(a, a+N); m = 0; f[0] = 1; k = 1; //K是不能组合的最小值,即暂时的答案 for(i = 0; i < N; i ++) { m += a[i]; //前i个数之和,组合的最大值 if(k < a[i]) break; //如果此时的a[i]已经比K值大了,那么就再不能够组合得到K了,K即最终答案了 for(int j = m; j >= k; j --) { if(f[j-a[i]] == 1) f[j] = 1; } while(f[k] == 1) k ++; } printf("%d\n", k); } return 0; }
hdu 4104
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。