您的位置:首页 > 其它

poj 2353 Ministry 对规划方向有要求的dp

2015-10-08 00:27 363 查看
//poj 2353
//sep9
#include<iostream>
using namespace std;
int dp[128][512],cost[128][512],path[128][512];
int m,n;
void print(int row,int col)
{
if(path[row][col]==col)
print(row-1,col);
else if(path[row][col]==col+1)
print(row,col+1);
else if(path[row][col]==col-1)
print(row,col-1);
printf("%d\n",col);
}

int main()
{
scanf("%d%d",&m,&n);
for(int i=1;i<=m;++i)
for(int j=1;j<=n;++j)
scanf("%d",&cost[i][j]);
for(int j=1;j<=n;++j)
dp[1][j]=cost[1][j],path[1][j]=-1;
for(int i=2;i<=m;++i){
for(int j=1;j<=n;++j)
dp[i][j]=dp[i-1][j]+cost[i][j],path[i][j]=j;
for(int j=n-1;j>=1;--j)
if(dp[i][j]>dp[i][j+1]+cost[i][j])
dp[i][j]=dp[i][j+1]+cost[i][j],path[i][j]=j+1;
for(int j=2;j<=n;++j)
if(dp[i][j]>dp[i][j-1]+cost[i][j])
dp[i][j]=dp[i][j-1]+cost[i][j],path[i][j]=j-1;
}
int ans=INT_MAX,ans_j;
for(int j=1;j<=n;++j)
if(ans>dp[m][j])
ans=dp[m][j],ans_j=j;
print(m,ans_j);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  poj 算法 dp