设为首页 加入收藏

TOP

UVA 1366-Martian Minging(DP)
2015-07-20 17:12:19 来源: 作者: 【 】 浏览:2
Tags:UVA 1366-Martian Minging

题目大意:有一个n(1<=n<=500)行m(1<=m<=500)列的网格,每个网格有两种矿,yeyenum和bloggium,在网格的西边是yeyenum的精炼厂,北边是bloggium的精炼厂,每个网格有一定数量的两种矿,现在要安排一个传送带系统,传送带只能由南向北或者由东向西,传送带同方向的可以连续传,只有传到相应精炼厂才是有效的,问许多能拿到多少矿。


用d[i][j]表示到第i行第j列时,前i行j列能产生的最大的矿数量,用a[i][j]表示在第i行从第1列加到第j列的yeyenum矿,用b[i][j]表示bloggium矿在第j列从第1行加到第i行,根据第i行第j列的格子向左还是向上递推,要么向左,第i行全部向左,要么向上,第j列全部向上。


状态转移方程:d[i][j]=max { d[i-1][j]+a[i][j],d[i][j-1]+b[i][j] }


#include
  
   
#include
   
     int a[510][510]; int b[510][510]; int d[510][510]; int main(void) { int i,j,n,m; scanf("%d%d",&n,&m); while((n!=0)||(m!=0)) { for(i=1;i<=n;i++) { for(j=1;j<=m;j++) { scanf("%d",&a[i][j]); } } for(i=1;i<=n;i++) { for(j=1;j<=m;j++) { scanf("%d",&b[i][j]); } } for(i=1;i<=n;i++) { for(j=2;j<=m;j++) { a[i][j]=a[i][j-1]+a[i][j]; } } for(i=2;i<=n;i++) { for(j=1;j<=m;j++) { b[i][j]=b[i-1][j]+b[i][j]; } } for(i=1;i<=n;i++) { for(j=1;j<=m;j++) { if(d[i-1][j]+a[i][j]>d[i][j-1]+b[i][j]) { d[i][j]=d[i-1][j]+a[i][j]; } else { d[i][j]=d[i][j-1]+b[i][j]; } } } printf("%d\n",d[n][m]); scanf("%d%d",&n,&m); } return 0; }
   
  


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇HDU 5185 Equation (线性dp 完全.. 下一篇hdu 2553 N皇后问题 经典搜索,DF..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·有没有哪些高效的c++ (2025-12-27 08:20:57)
·Socket 编程时 Accep (2025-12-27 08:20:54)
·计算机网络知识点总 (2025-12-27 08:20:52)
·一篇说人话的文章, (2025-12-27 07:50:09)
·Python Web框架哪家 (2025-12-27 07:50:06)