摘要: /*DP问题问题是这样子的,最多100个物品,每个物品有两个属性,这是一个特别的DP问题,虽然明显看起来像是01背包,但是似乎又无法下手,想到了二维的DP,但是状态为DP[i][200000][200000],不仅开不出来,而且速度也不行,转化一下发现,可以把其中一个限制条件转化为价值,另外一个当代价,因为最后求的是这两个限制条件的和。所以可以这样来做。思路也很巧妙这也给我们一个教训,01背包要活学活用,限制条件可以适当转化DP[i][cost],当一个限制条件是 cost时的最大值value.最后求cost+value的最大值即可,当然要求cost和value都必须大于0*/// inclu 阅读全文
posted @ 2011-04-20 23:09 AC2012 阅读(412) 评论(0) 推荐(0) 编辑
摘要: // include file#include <cstdio>#include <cstdlib>#include <cstring>#include <cmath>#include <cctype>#include <ctime>#include <iostream>#include <sstream>#include <fstream>#include <iomanip>#include <bitset>#include <algorithm># 阅读全文
posted @ 2011-04-20 18:30 AC2012 阅读(146) 评论(0) 推荐(0) 编辑
摘要: /*多重背包问题*/// include file#include <cstdio>#include <cstdlib>#include <cstring>#include <cmath>#include <cctype>#include <ctime>#include <iostream>#include <sstream>#include <fstream>#include <iomanip>#include <bitset>#include <algo 阅读全文
posted @ 2011-04-20 18:18 AC2012 阅读(121) 评论(0) 推荐(0) 编辑
摘要: /*p = (a+b+c)/2;S^2 = p*(p-a)*(p-b)*(p-c)这些包可以形成所有的可行边长DP问题。二维的DP背包问题,对于二维的01背包的理解,可以从一维的开始理解一维01背包的方程是 DP[k] = max(DP[k],DP[k-代价]+价值);,这里DP方程意思是说,代价为K时的最大价值二维01背包的方程是 DP[k1][k2] = max(DP[k1][k2],DP[k1-代价][k2]+价值,DP[k1][k2-代价]+价值);,这里DP方程是说,代价为k1和k2时的最大价值当然对于多维,DP在加一位就是了。这里唯一区别的地方是,每个物品只能在一个背包中,所以如果 阅读全文
posted @ 2011-04-20 17:23 AC2012 阅读(737) 评论(0) 推荐(0) 编辑
摘要: /*DP*/// include file#include <cstdio>#include <cstdlib>#include <cstring>#include <cmath>#include <cctype>#include <ctime>#include <iostream>#include <sstream>#include <fstream>#include <iomanip>#include <bitset>#include <algorith 阅读全文
posted @ 2011-04-20 00:34 AC2012 阅读(521) 评论(0) 推荐(0) 编辑