一、题目概述:有一个没有排序,元素个数为2N的正整数数组。要求把它分割为元素个数为N的两个数组,并使两个子数组的和最接近。假设数组A[1..2N]所有元素的和是SUM。模仿动态规划解0-1背包问题的策略,令S(k, i)表示前k个元素中任意i个元素的和的集合。显然:S(k, 1) = {A[i] |...
分类:
编程语言 时间:
2015-04-26 10:44:06
阅读次数:
138
描述现在有很多物品(它们是可以分割的),我们知道它们每个物品的单位重量的价值v和重量w(1 2 typedef struct value 3 { 4 int v;/*价值*/ 5 int w;/*重量*/ 6 }thing; 7 int main() 8 { 9 int n;...
分类:
其他好文 时间:
2015-04-25 14:52:43
阅读次数:
119
HDU1561——The mre,The better
题意:给定一棵包含n个结点的树,每一个节点附有对应的value,选取其中的m个结点使得总value最大。一个结点被选择的条件是其父节点已经被选择。
解析:1.虚拟出一个总根节点,将深林转化为一棵树。
2.d[r][i]表示在以r为根的子树中选取i个结点所能获得的最大value
d[r][i...
分类:
其他好文 时间:
2015-04-25 13:46:26
阅读次数:
112
贪心描述现在有很多物品(它们是可以分割的),我们知道它们每个物品的单位重量的价值v和重量w(1 2 typedef struct value 3 { 4 int v;/*价值*/ 5 int w;/*重量*/ 6 }thing; 7 int main() 8 { 9 int ...
分类:
其他好文 时间:
2015-04-25 12:09:32
阅读次数:
112
分析:多重背包问题。这里直接转换为01背包,为使用二进制。
#include
using namespace std;
int price[101];
int weight[101];
int number[101];
int dp[101];
int main()
{
int C,n,m;
int i,j,k;
cin>>C;
while(C--)
{
cin>>n...
分类:
其他好文 时间:
2015-04-24 19:19:37
阅读次数:
132
分析:最大录取概率=1-最小不录取概率。
0-1背包求出最小不录取概率,然后用1减去即可。
注意dp数组初始化时概率要先设置为1,表示一开始被录取。
#include
using namespace std;
double p[10001],dp[10001];
int v[10001];
int main()
{
int n,m,i,j;
while(cin>>n>>m &&(...
分类:
其他好文 时间:
2015-04-24 19:14:40
阅读次数:
128
多重背包/思路题 多次询问,每次从所有物品中忽略一件,问最大收益…… 这题我用的zyf的一个“暴力”做法,就是先预处理出来g1[i][j]表示1~i号物品花了j块钱的最大价值,g2[i][j]表示i~n号物品花了j块钱的最大价值(这里我将所有的物品编号都加了1,原因……因为我一开始没+1,WA了.....
分类:
其他好文 时间:
2015-04-22 19:58:54
阅读次数:
190
Sum of Different PrimesTime Limit:5000MSMemory Limit:65536KTotal Submissions:3280Accepted:2040DescriptionA positive integer may be expressed as a sum ...
分类:
其他好文 时间:
2015-04-22 01:46:36
阅读次数:
169
dd大牛的《背包九讲》P01: 01背包问题题目有N件物品和一个容量为V的背包。第i件物品的费用是c[i],价值是w[i]。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。基本思路这是最基础的背包问题,特点是:每种物品仅有一件,可以选择放或不放。用子问题定义状态:即f[i...
分类:
其他好文 时间:
2015-04-21 22:05:57
阅读次数:
173
一 01背包:一件物品只能放一次二维动态转移方程 dp[i][j] = max(dp[i-1][j],dp[i-1][j-w[i]]+v[i])降低空间复杂度用一维: dp[j] = max(dp[j],dp[j-w[i]]+v[i]), j 从V到0(为了防止数组越界,到w[i])代码实现:#in...
分类:
其他好文 时间:
2015-04-21 20:07:33
阅读次数:
144