srm 653 div2 1000(dp)
来源:互联网 发布:大数据百度百科 编辑:程序博客网 时间:2024/05/16 16:08
题意:
一个序列的值定义为其差分结果的绝对值之和。例如, {1, 2, 3} 值为 abs(2-1) + abs(3-2) = 2
现在有一个长度大于等于1的序列,要求把它分成两个子序列,使得两个序列的值之和最小。
思路:
一开始想残了。。
打算用
其实,我们只要考虑
状态转移:
1)j继续唱,
2)j打断i,
2的情况注意k=0,这个时候转移是不产生额外费用的。
const int Maxn = 2000;const int inf = INT_MAX/2;int dp[Maxn+5][Maxn+5];class SingingEasy{ public: int solve(vector <int> pitch) { int n = pitch.size(); dp[0][1] = 0; for (int i=2;i<=n;++i) { for (int j=0;j<i-1;++j) { dp[j][i] = dp[j][i-1] + abs (pitch[i-1] - pitch[i-2]); } dp[i-1][i] = inf; for (int k = 0;k<i-1;++k) { int tmp = k == 0 ? 0 : abs(pitch[i-1] - pitch[k-1]); if (dp[k][i-1] + tmp < dp[i-1][i]) dp[i-1][i] = dp[k][i-1] + tmp; } } int ans = inf; for (int i=0;i<n;++i) ans = min (ans, dp[i][n]); return ans; }}
0 0
- srm 653 div2 1000(dp)
- srm 656 div2 1000(dp+组合)
- srm 301 div2 1000 (经典dp, 括号匹配)
- srm 302 div2 1000(简单题,bfs,dp)
- srm 304 div2 1000(环形DP进阶,几何)
- topcoder SRM 654 DIV2 1000 SuccessiveSubtraction2 题解(dp)
- srm 306 div2 1000 (字符串dp,进阶)
- srm 308 div2 1000(DP, 离散背包+连续背包)
- srm 655 div2 1000(DP进阶,枚举状态)
- SRM 649 div2 500(dp)
- TopCoder SRM 653 Div2 Problem 500 - RockPaperScissorsMagicEasy (DP)
- srm 654 div2 1000 (DP,最大连续和拓展, 有亮点)
- TopCoder SRM 648 Div2 Problem 1000 - ABC (DP)
- TopCoder SRM 663 Div2 Problem 1000 - CheeseRolling (状压dp)
- TopCoder SRM 672 Div2 Problem 1000 - Tdetectived2 (状压dp)
- Topcoder SRM 663 Div2 Hard: CheeseRolling(状压DP)
- srm 300 div2 1000(贪心进阶)
- srm 307 div2 1000(数论,枚举)
- 芅蒈蚀膆膇蒄袈羅膀薀薅袄
- 袂肆薈蝿羄节蒄螈肇肅莀袇
- 黑马程序员——java.lang.unsupportedclassversionerror
- C#异步调用的应用实践浅谈
- Servlet生命周期与工作原理
- srm 653 div2 1000(dp)
- poj 2175 Evacuation Plan(最小费用流 (消圈算法))
- 找球号(一)
- Ctrl+Z,Ctrl+D
- 【BZOJ2466】【中山市选2009】树 高斯消元解异或方程组
- http://www.ebay.de/cln/hkrwr-mlkpoc9a/2015-03.17/189018409012
- 蚁群算法解决TSP问题的JAVA实现(一)
- JAVA操作properties文件
- 黑马程序员--c语言-计算机中的进制