hdu4540 威威猫系列故事——打地鼠(简单DP)
2016-02-19 19:12
381 查看
虽然简单DP,但我还是想了半天。。。
状态方程:dp[i][j] = min(dp[i][j], dp[i - 1][l] + abs(a[i - 1][l] - a[i][j])) (0 <= l <= k)。
把k的坐标写在数组里当成花费,从上往下规划,该层每个点都是前面节点经过此节点的最小能量消耗。
状态方程:dp[i][j] = min(dp[i][j], dp[i - 1][l] + abs(a[i - 1][l] - a[i][j])) (0 <= l <= k)。
把k的坐标写在数组里当成花费,从上往下规划,该层每个点都是前面节点经过此节点的最小能量消耗。
#include <stdio.h> #include <cstring> #include <algorithm> using namespace std; const int N = 55; const int INF = 1<<27; int main() { // freopen("in.txt", "r", stdin); int a , dp ; int j, i, n, k, num; while(~scanf("%d%d", &n, &k)) { num = INF; for(i = 0; i < n; i ++) for(j = 0; j < k; j ++) scanf("%d", &a[i][j]); memset(dp, 0, sizeof(0)); for(i = 1; i < n; i ++) for(j = 0; j < k; j ++) { dp[i][j] = INF; for(int l = 0; l < k; l ++) dp[i][j] = min(dp[i][j], dp[i - 1][l] + abs(a[i - 1][l] - a[i][j])); } for(i = 0; i < k; i ++) num = min(num, dp[n - 1][i]); printf("%d\n", num); } return 0; }
相关文章推荐
- HDU 1568
- HDU1290
- HDU1568(Fobonacci公式)
- HDU ACM Step 2.2.2 Joseph(约瑟夫环问题)
- HDU 1405
- HDU 1297
- hdu 1205
- hdu 2087
- hdu 1016
- HDU 4898 The Revenge of the Princess’ Knight ( 2014 Multi-University Training Contest 4 )
- HDU 5592 ZYB's Premutation 线段树(查找动态区间第K大)
- HDU 5240 Exam (好水的题)
- HDU5237 Base64 大模拟
- HDU 1000
- HDU 1001
- 2015-11-11 hdu新生赛 A题(AC)
- 2015-11-11 hdu新生赛 C题(结束后一发AC)
- 2015-11-11 hdu新生赛 E题(结束后一发AC)
- 2015-11-11 hdu新生赛 F题(结束后一发AC)
- hdu-5385