关于要求一串数字不超过某个数字可以达到的最大和(DP背包问题)
来源:互联网 发布:青岛淘宝美工招聘信息 编辑:程序博客网 时间:2024/04/30 22:14
类似题目:
uva562
uva624
可以先将所有的值加起来,然后两层for。
外面一层是关于值的循环,里面一层是关于还有多少容量的循环。
for(int i = 1; i <= n ; i++) {
for(int j = sum; j >= a[i]; j–) {
dp[j] = max(dp[j],dp[j - a[i]]+a[i]);
}
}
最后dp[sum]就是可以达到的最大值
滚动数组:以uva624为例
for(int i = 0; i < tracks; i++) {
for(int j = N; j >= 0;j–)
if(j >= t[i] && dp[j] <= dp[j - t[i]] + t[i] && dp[j - t[i]]+t[i] <= N) {
dp[j] = dp[j - t[i]] + t[i];
}
uva562代码:
#include <iostream>using namespace std;#include <stdio.h>#include <cstring>int dp[100005],a[100005];int main() { int cases; int n; int sum; scanf("%d",&cases); while(cases--) { sum = 0; scanf("%d",&n); for(int i = 1 ; i <= n ; i ++) { scanf("%d",&a[i]); sum += a[i]; } memset(dp,0,sizeof(dp)); for(int i = 1; i <= n ; i++) { for(int j = sum / 2; j >= a[i]; j--) { dp[j] = max(dp[j],dp[j - a[i]]+a[i]); } } printf("%d\n",sum - 2 * dp[sum / 2]); } return 0;}
0 0
- 关于要求一串数字不超过某个数字可以达到的最大和(DP背包问题)
- 输入一串数字输出最大的数字
- 给定一串数字求连续的最大和
- 机试-求一串数字中,最大与最小的数字的和
- 1、 输入一串字符,只包含“0-10”和“,”找出其中最小的数字和最大的数字(可能不止一个),输出最后剩余数字个数。
- 输入一串字符,只包含“0-10”和“,”,找出其中最小的数字和最大的数字(可能不止一个),输出最后剩余数字个数
- hdu 1024 Max Sum Plus Plus 一串数字中,m段连续数字最大和 滚动数组+dp
- 输入一串字符,要求数字从小到大,字母从a到z排序,输出字母和数字的排序结果。
- 找出一串数字中的最大和子串
- 关于ruby中求一串字符串中数字的和,小白的一点理解。
- 关于从字符串中提取一串数字的代码
- 关于输入一串数字转变成Mac地址(方法之一)
- 算出大于一串数字的最小值,要求此数值的相邻两位不能相同
- 解密 关于&#加数字可以得到各种符号的问题
- POJ 1163 The Triangle (简单 DP 数字的最大路线和)
- 数入一串数字和任意数字的空格 计算其和.
- 给出一串有数字和字符的字符串,计算有多少数字和字符
- 数字三角形问题(DP)
- AFNetworking 3.0迁移指南
- 直接插入排序
- 是否可以从一个静态(static)方法内部发出对非静态(non-static)方法的调用?
- Unix网络编程之名字与地址转化—gethostbyname
- fastImageCache解析:来自bang同学,非常棒!
- 关于要求一串数字不超过某个数字可以达到的最大和(DP背包问题)
- 操作系统c实现银行家算法
- Android学习 -- 《Intent app间通信》
- 乱码问题的整理 ps:补交昨天的作业
- 使用dtree构建框架导航
- VR开发 入门 使用Three.js 开发的WebVR demo
- ant分包环境搭建过程
- hibernate事务介绍
- MySQL的常用操作