14级DP专场题解bulid by hzz at 2015-08-16 22:12
Rating:1805
A:FZU 2129
   dp[i]表示前i个数可组成的子序列个数. 状态转移方程:dp[i]=dp[i-1]*2,
但当a[i]前面已出现过,需要去重。此时dp[i]=dp[i-1]*2-dp[j-1],j位数值a[i]在前面出现
过的最后位置。最后答案要-1,减掉一个空串。
B:hdu 1081
   dp[i][j][k]表示从i行到j行,前k列。枚举任意i行到j行(i>=j),将其所有上下行相加,
压缩成一行,然后求改行的最大字段和。
C:hdu 1028
   完全背包。把n当背包容量,然后n个物品,第i个物品的价值和体积都是i;就可以算了。dp[j]+=dp[j-w[i]];
   完全背包不懂百度吧,肯定讲的比我清楚。
D:hdu 2577
   dp[i][0]和dp[i][1]分别表示到第i个字符时大写锁关
E:hdu 2709
   设dp[n]表示和为n的组合数;
   当n为奇数时,相当于在dp[n-1]的每一个组合方案中的后面加1 所以,dp[n]=dp[n-1];
   n为偶数时,分为每个方案中有1和无1进行讨论:
   有1的话,相当与在dp[n-1]后面加1
   不含1的话,则就是对dp[n/2]的方案数中的每一个数乘以2, 所以就是dp[n/2]的方案数,所以dp[n]=dp[n-1]+dp[n/2];

F:hdu4512
   最长公共上升子序列。将输入的序列反向存入另一个数组里,再用这两个序列求最长公共上升子序列。
   最长公共上升子序列不懂百度吧,肯定讲的比我清楚。
回复
要回复,请先登录

T^T Online Judge

[BUG反馈] [FAQ] [闽ICP备17026590号-1]
当前版本:3.24 系统时间: