USACO Milking Cows
Code
1 | /* |
1 | /* |
1 | /* |
1 | /* |
1 | /* |
1 | /* |
有\(n\)个城市,要从第1个出发,经过\(k\)天到第\(n\)个。给出每天城市间旅行的花费,输出最小的话费值。
定义\(dp[d][i]\)为第\(d\)天到城市\(i\)的最小花费。如果第\(d + 1\)天在城市\(i\)与城市\(j\)之间有航线,则可以转移至\(dp[d + 1][j]\)。
1 | #include <cstdio> |
给出\(n\)个主题,给出每节课的长度\(L\)和不满意度参数\(C\),要安排课程。要求单个主题不能拆分在两节课上,主题间的顺序不能打乱。另外每堂课根据剩余时间\(x\)有不同不满意度:
输出最少安排课程的节数,和最小的不满意度。
定义状态\(d[i][j]\)为上\(i\)节课,讲到第\(j\)个主题时最小的不满意度。对于\(d[i][j]\)如果第\(k\)个主题连续讲到第\(j\)个主题可以在一节课之内完成,则可以从\(dp[i - 1][k]\)转移。
1 | #include <cstdio> |
给出一串不同颜色方块,每次可以消去一段连续的颜色相同的方块,获得的分数为消去部分长度的平方,输出最大可能得分。
定义状态\(d[i][j][k]\)为消去原序列中\(i\)到\(j\)的序列右边接上长度为\(k\)的与\(j\)相同颜色的方块后的最大得分。
1 | #include <cstdio> |
用四个柱子进行的汉诺塔游戏。每次把前\(k\)个盘子放到第四个柱子上,然后按照三个柱子的汉诺塔玩法把剩余盘子转移到目标柱子上,最后把第四个柱子上的盘子转移到目标柱子上。输出转移\(n\)个盘子到目标柱子上的最少移动次数。
思路出自:D_Double's Journey
设\(g[n]\)为三根柱子的汉诺塔移动\(n\)个圆盘所需最少步数,\(f[n]\)为四根柱子所需要的最少步数。可得\(f[n] = min(f[k] \times 2 + g[n - k])\)。打表求出前几项后可以得出规律。
1 | f[1] = 1 |
1 | import java.math.*; |
给出一个长度为\(n\)的字符串,输出要将它变成回文串所需要添加字母数目的最小值和任意一个转换之后的回文串。
区间dp。定义状态\(dp[i][j]\)为把从i到j连续子串变为回文串,所需添加字母数目的最小值。有如下转移:
至于打印结果,可以直接递归打印。
1 | #include <cstdio> |