(dp)正整数分组
来源:互联网 发布:网络带来的利与弊论文 编辑:程序博客网 时间:2024/06/05 15:14
(出处51nod)
将一堆正整数分为2组,要求2组的和相差最小。
例如:1 2 3 4 5,将1 2 4分为1组,3 5分为1组,两组和相差1,是所有方案中相差最少的。
输入
第1行:一个数N,N为正整数的数量。第2 - N+1行,N个正整数。(N <= 100, 所有正整数的和 <= 10000)
输出
输出这个最小差
输入示例
512345
输出示例
1
----------------------------------------------------------------------------
分析:
用背包做,dp[i][j]代表前i个数字部分和为j
---------------------------------------------------------------------------------------------
AC代码:
#include <iostream>#include<cstdio>using namespace std;int dp[110][10100];int a[110];int main(){ int b; int n; cin >> n; int ans = 20000; int res = 0; for (int i=0; i<n; i++) { cin >> a[i]; res += a[i]; } for (int i=0; i<=n; i++) { for (int j=0; j<res; j++) { if ((i == 0) && (j == 0)) { dp[i][j] = 1; continue; } if ((i == 0) && (j != 0)) { dp[i][j] = 0; continue; } if (a[i] > j) { dp[i][j] = 0; } if ((j >= a[i]) && (dp[i-1][j-a[i]])) { dp[i][j] = 1; } if (dp[i-1][j]) { dp[i][j] = 1; } } } for (int j=0; j<res; j++) { if (dp[n][j]) { b = res - j; b = (j > b? j - b : b - j); ans = min(ans, b); } } cout << ans << endl; return 0;}
阅读全文
0 0
- 1007 正整数分组 dp
- 正整数分组(dp)
- dp--正整数分组
- (dp)正整数分组
- 51nod1007:正整数分组 DP
- 正整数分组--01背包+dp
- 正整数分组
- 正整数分组
- 正整数分组
- 正整数分组
- 正整数分组
- 正整数分组
- 正整数分组
- 正整数分组
- 正整数分组
- 51nod-正整数分组问题(基础方程DP-01背包)
- 51nod 1007 正整数分组(背包/dp)
- 1007 正整数分组
- 今日群更新:20天JAVA基础从入门到精通
- maven项目模板
- 完美的sharedPreference工具类
- weblogic10.3.6部署war包时出现weblogic.descriptor.DescriptorException: VALIDATION PROBLEMS WERE FOUND
- Error: Cannot retrieve metalink for repository: epel. Please verify its path and try again
- (dp)正整数分组
- java验证邮箱地址是否正确
- JavaScript 产生不重复的随机数三种实现思路
- Linux下开启禁用ping
- 单调栈--poj2796 Feel good
- web App开发中手机滑动的流畅性
- app开发中的异步处理(三)
- Android自定义控件:NestedScrolling实现仿魅族flyme6应用市场应用详情弹出式layout
- Session