Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 1114 Accepted Submission(s): 477
#include <stdio.h> #define INF 100000 #define MAX(a,b) a>b?a:b #define REP(i,x,y) for(int i=x;i<y;i++) #define REP1(i,x,y) for(int i=x;i>=y;i--) int maze[101][101],d[101],d1[101],d2[101]; void Input(int m,int n){ REP(i,0,m) REP(j,0,n) scanf("%d",&maze[i][j]); } void Hunt(int m,int n){ //init d[0]=maze[0][0]; REP(i,1,m) d[i]=d[i-1]+maze[i][0]; REP(j,1,n){ //从上往下扫描 d1[0]=d[0]+maze[0][j]; REP(i,1,m){ //这两行代码不能合为一句,否则返回的只是MAX的值 d1[i]=MAX(d[i],d1[i-1]); d1[i]+=maze[i][j]; } //从下往上扫描 if(m>1){ d2[m-1]=d[m-1]+maze[m-1][j]; REP1(i,m-2,0){ d2[i]=MAX(d[i],d2[i+1]); d2[i]+=maze[i][j]; } } else{ REP(i,0,m) d2[i]=-INF; } REP(i,0,m) d[i]=MAX(d1[i],d2[i]); } } int main(){ int t,m,n; scanf("%d",&t); REP(i,1,t+1){ scanf("%d%d",&m,&n); Input(m,n); Hunt(m,n); printf("Case #%d:\n%d\n",i,d[0]); } return 0; }
原文:http://www.cnblogs.com/520xiuge/p/6506555.html