您的位置:首页 > 其它

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的坐标写在数组里当成花费,从上往下规划,该层每个点都是前面节点经过此节点的最小能量消耗。

#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