个人非常喜欢做DP题,因为DP题有着特殊的数学美感持续不断吸引着我,不过最近因为事情繁忙,故好长时间没有刷DP题了,现在空下来,是时候重操旧业了,就从Codeforce上的题入手,至于为什么选这上面的题,因为目前DP题的走向趋向于状态方程极度隐蔽化!!! 而Codeforce上的题向来以巧妙著称,DP题就更是妙上加妙,所以感觉刷这DP的题能让人更上时代。
467C George and Job
题目描述:
http://codeforces.com/problemset/problem/467/C
大致思路:
dp[i][j]代表前i个数中拿了j次m个数的最优情况,dp[i][j]=max(dp[i][j],dp[i-1][j-1],dp[i-m][j-1]+sum(i)-sum(i-m)); 5000*5000从空间上来说浪费太多,故用滚动数组更好,细节自己处理一下。
参考代码:
http://codeforces.com/contest/467/submission/7836144
466D Increase Sequence
题目描述:
http://codeforces.com/problemset/problem/466/D
大致思路:
dp[i][j]表示前i个数中还留有j个右开区间时的最优情况,dp[n][0]就是最终答案,然后考虑到i到i+1的情况,当且仅当i的右开区间等于h-a[i+1]或h-a[i+1]-1时有解,分类情况讨论一下,即可得出状态转移方程。
参考代码:
http://codeforces.com/contest/466/submission/7910930
463D Gargari and Permutations
题目描述:
http://codeforces.com/problemset/problem/463/D