poj 2353 简单dp
来源:互联网 发布:python正则匹配某一行 编辑:程序博客网 时间:2024/05/18 02:10
对于每一层,从两头分别计算一遍就行。
#include<stdio.h>#include<algorithm>#include<iostream>#include<string.h>using namespace std;const long long inf=((long long)1<<63 - 1);int path[105][505],a[105][505],M,N;long long dp[105][505];void print(int i,int j){ if(path[i][j]!=-2) { if(path[i][j]==-1) print(i,j-1); else if(!path[i][j]) print(i-1,j); else print(i,j+1); printf("%d\n",j); }}int main(){// freopen("test.txt","r",stdin); scanf("%d%d",&M,&N); for(int i=1;i<=M;i++) for(int j=1;j<=N;j++) scanf("%d",&a[i][j]); for(int i=1;i<=N;i++) dp[0][i]=0,path[0][i]=-2; for(int i=1;i<=M;i++) dp[i][0]=dp[i][N+1]=inf; for(int i=1;i<=M;i++) { for(int j=1;j<=N;j++) { if(dp[i][j-1]<dp[i-1][j]) path[i][j]=-1; else path[i][j]=0; dp[i][j]=min(dp[i-1][j],dp[i][j-1])+a[i][j]; } for(int j=N;j>=1;j--) { long long t=min(dp[i-1][j],dp[i][j+1])+a[i][j]; if(t<dp[i][j]) { if(dp[i][j+1]<dp[i-1][j]) path[i][j]=1; else path[i][j]=0; dp[i][j]=t; } } } long long ans=inf,num; for(int i=1;i<=N;i++) if(dp[M][i]<ans) ans=dp[M][i],num=i; print(M,num); return 0;}
- poj 2353 简单dp
- poj 2353(简单dp+输出路径)
- POJ 2181简单DP
- POJ-2004 简单DP..
- poj 2385 简单dp
- poj 3486 简单dp
- poj-2355-简单dp
- poj-2479 简单DP
- poj 3267 简单dp
- poj 3132简单dp
- poj 3280 简单dp
- poj 2948 简单dp
- POJ 3176 简单DP
- POJ 3176 简单DP
- poj 3616(简单dp)
- poj 3920(简单dp)
- poj 2355(简单dp)
- POJ 2479 (简单dp)
- mysql语句中limit的用法
- IBM Rational 助您轻松完成自动化功能测试
- 作为程序员,你怎么看待16岁女生产子?
- HTML 5与CSS 3权威指南(第2版.下册)
- 【黑马程序员】-Java基础语法 第三天
- poj 2353 简单dp
- 从1.5k到18k, 一个程序员的5年成长之路【转载】
- 快逸报表研究-冻结表头
- eclipse启动时弹出Failed to create the Java Virtual Machine
- callbacks,回调函数
- JQuery的read函数与js的onload的实现
- 隐私保护新观点(信息防泄漏的意义)
- Linux平台用C++封装线程读写锁
- 创建HTML5离线应用