动态规划小题目;

#include <stdio.h> const int M = 1000; int input[M][M]; int row[M]; int col[M]; int m,n; void dpCol(int r) { int c=input[r][n-1],d=0; int i; for(i=n-2;i>=0;--i) { int a=input[r][i]+d,b=c; d=c; c = a > b ? a:b; } row[r]=c; } int dpRow() { int i; for(i=0;i<m;++i) { dpCol(i); } int c=row[m-1],d=0; for(i=m-2;i>=0;--i) { int a=row[i]+d,b=c; d=c; c=a > b ? a:b; } return c; } int main() { scanf("%d%d",&m,&n); int i,j; for(i=0;i<m;++i) { for(j=0;j<n;++j) { scanf("%d",&input[i][j]); } } printf("%d/n",dpRow()); return 0; }

 

拾钻石游戏是种有趣的游戏 , 每位玩家各拥有一块 M*N 方格组成的棋盘 , 棋盘上放置了
不同价值的钻石 , 并且 , 每个 1*1 小方格上只放置一颗钻石 。 每个人可以拾取钻石并获得相
应价值,但必须遵循如下规则:如果拾取了位于 (x,y) 处的钻石,那么就不能拾取 (x,y-1)
和 (x,y+1) 处的钻石,同时, x-1 和 x+1 这两行钻石也不能够取走

★ 任务
编程求解给定的 M*N 方格组成的棋 能获得的最大价值。

例如
11 0 7 5 13 9
78 4 81 6 22 4
1 40 9 34 16 10
11 22 0 33 39 6


输出的结果是242

你可能感兴趣的:(游戏,编程,input,include,任务,IM)