UVa 562 - Dividing coins
2014-03-14 16:26
399 查看
题目链接:UVa 562 - Dividing coins
dp[j]表示硬币可以凑成和为j的钱数。
如果dp[j - num[i]]可以凑成,那么dp[j]肯定可以凑成,加上硬币面值为num[i]就可以了。
第二重for循环需要逆推,这保证了一个硬币只能选择一次。
这题加深了我对01背包使用一维数组实现的理解。讲解移步这里。
dp[j]表示硬币可以凑成和为j的钱数。
如果dp[j - num[i]]可以凑成,那么dp[j]肯定可以凑成,加上硬币面值为num[i]就可以了。
第二重for循环需要逆推,这保证了一个硬币只能选择一次。
这题加深了我对01背包使用一维数组实现的理解。讲解移步这里。
#include <iostream> #include <cstring> using namespace std; const int MAX_N = 105; const int MAX_M = MAX_N * 500; int dp[MAX_M]; int num[MAX_N]; int n,sum; int T; int main() { cin >> T; while(T--) { cin >> n; sum = 0; memset(dp,0,sizeof(dp)); dp[0] = 1; for(int i = 0;i < n;i++) { cin >> num[i]; sum += num[i]; } for(int i = 0;i < n;i++) { for(int j = sum;j - num[i]>= 0;j--) if(dp[j - num[i]]) dp[j] = 1; } for(int i = sum >> 1;i >= 0;i--) { if(dp[i]) { cout << sum - i * 2 << endl; break; } } } return 0; }
相关文章推荐
- subprogram call in ADA language
- new Function()
- 汇编语言之屏幕字符显示
- Eclipse快捷键
- android4.0.3 修改启动动画和开机声音
- Matplotlib学习-自己分析近13天的余额宝日万元收益
- 开源日志采集系统比较:scribe、chukwa、kafka、flume
- CentOS离线安装gcc4.8.2
- Revit二次开发示例:AutoUpdate
- HOG算子
- jquery对表的操作
- Yii textField显示session里面的值
- NSDictionary一些常用用法
- rman配置及rman常用命令操作
- JAVA中String与StringBuffer的区别
- Codeforces Round #197 (Div. 2) / 339C Xenia and Weights (爆搜)
- 随机数洗牌
- 基于HOG特征的Adaboost行人检测
- 实数四舍五入
- LR查看code generation方便