您的位置:首页 > 其它

威威猫系列故事——打地鼠HDU - 4540 (简单dp)

2017-08-04 19:27 281 查看


C - 威威猫系列故事——打地鼠

HDU - 4540 

solution:

一排一排的确定,dp[i][j]表示的是在第i排第j个数消耗的最小能量。

求dp[i][j]时,要将上一排的数都遍历一遍,找出dp[i][j]与上一排某个数dp[i-1][k]的差和dp[i-1][k]自身本来的值的和的最小值,即状态转移方程:

dp[i][j] = min ( dp[i][j] , dp[i-1][k] + abs ( a[i][j] - a[i-1][k] ) ) ;

code:

#include<stdio.h>
#include<math.h>
#include<algorithm>
using namespace std;
#define inf 1100000
int dp[22][12],a[22][12];
int main()
{
int n,m,i,j,k;
while(~scanf("%d%d",&n,&m))
{
for(i=0;i<n;i++)
for(j=0;j<m;j++)
{
scanf("%d",&a[i][j]);
dp[i][j]=inf;
}
for(i=0;i<m;i++)
dp[0][i]=0;
for(i=1;i<n;i++)
for(j=0;j<m;j++)
for(k=0;k<m;k++)
dp[i][j]=min(dp[i][j],dp[i-1][k]+abs(a[i][j]-a[i-1][k]));//状态转移方程。
int min1=inf;
for(i=0;i<m;i++)//在最后一排找出的最小值就为所求值。
if(dp[n-1][i]<min1)
min1=dp[n-1][i];
printf("%d\n",min1);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  dp