3 4 3 1 2 8 5 3 4 6 1 0 2 3
24
#include<cstdio> #include<cstring> int max(int a,int b) { return a>b ? a:b; } int main() { int n,m,i,j,a[22][22]; while(scanf("%d %d",&n,&m)!=EOF) { memset(a,0,sizeof(a)); 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++) { a[i][j]=a[i][j]+max(a[i-1][j],a[i][j-1]); } } printf("%d\n",a[n][m]); } }
#include<cstdio> #include<cstring> #include<iostream> using namespace std; int n,m,s,ans; int a[22][22],dir[2][2]={{0,1},{1,0}},vis[22][22]; void dfs(int x,int y) { if(x==n-1&&y==m-1) { ans=max(ans,s); return; } if(x<0||y<0||x>=n||y>=m) return; for(int i=0; i<2; i++) { int xx=x+dir[i][0]; int yy=y+dir[i][1]; if(xx>=0&&yy>=0&&xx<n&&yy<m&&!vis[xx][yy]) { vis[xx][yy]=1; s+=a[xx][yy]; } dfs(xx,yy); s-=a[xx][yy]; vis[xx][yy]=0; } } int main() { while(scanf("%d %d",&n,&m)!=EOF) { memset(a,0,sizeof(a)); for(int i=0;i<n; i++) { for(int j=0; j<m; j++) { scanf("%d",&a[i][j]); } } memset(vis,0,sizeof(vis)); s=a[0][0]; ans=s; dfs(0,0); printf("%d\n",ans); } return 0; }