您的位置:首页 > 其它

HDOJ 4540 威威猫系列故事——打地鼠 杭电 ACM

2013-07-13 20:42 507 查看
本题可以作为DP下状态转移方程的入门练习

既可以按传统的顺序转移方法 也可以逆向运算 顺序方法在网上已有人给出

以下给出逆向的方法

#include<string.h>
#include<stdio.h>
#include<math.h>
int main(){
int n,k,i,j,j2,a[20][10],s[20][10],t;//s[i][j]保存若最短路经过a[i][j]时该点后的最短路径之和
while(~scanf("%d%d",&n,&k)){
memset(s[n-1],0,sizeof(s[n-1]));//最后一排点之后的路径之和显然是0
for(i=0;i<n;++i)
for(j=0;j<k;++j)
scanf("%d",&a[i][j]);
for(i=n-2;i>=0;--i)
for(j=0;j<k;++j){
for(s[i][j]=5001,j2=0;j2<k;++j2)//每个点不超过500 至多5000
if((t=abs(a[i][j]-a[i+1][j2])+s[i+1][j2])<s[i][j])s[i][j]=t;
}
for(j=1;j<k;++j)
{if(s[0][j]<s[0][0])s[0][0]=s[0][j];}
printf("%d\n",s[0][0]);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  HDOJ ACM