1022: 淘金

#include <bits/stdc++.h>
using namespace std;
const int N= 205;
int w[N][N];
int dp[N][2];
int n,m; 
int main(){
	while(scanf("%d%d",&n,&m)!=EOF){
		memset(w,0,sizeof(w));
		for(int i=1;i<=n;i++)
			for(int j=1;j<=m;j++){
				scanf("%d",&w[i][j]);
			}
//		for(int i=1;i<=n;i++){
//			for(int j=1;j<=m;j++){
//				printf("%d ",w[i][j]);
//			}cout<<endl;
//			}
		int sum[N]; sum[0]=0;	sum[n+1]=0;
		for(int i=1;i<=n;i++){
			int dp[N][2]; dp[0][0]=dp[0][1]=0;	//1代表取,0代表不取 
			for(int j=1;j<=m;j++){
				dp[j][1]=dp[j-1][0]+w[i][j];
				dp[j][0]=max(dp[j-1][1],dp[j-1][0]);
			}
			sum[i]=max(dp[m][0],dp[m][1]);
//			cout<<i<<" "<<sum[i]<<endl;
		}
		int dp[N][2];dp[0][0]=dp[0][1]=0;
		for(int j=1;j<=n;j++){
			dp[j][1]=dp[j-1][0]+sum[j];
			dp[j][0]=max(dp[j-1][1],dp[j-1][0]);
		}
		printf("%d\n",max(dp[n][0],dp[n][1]));
	}
}
posted @ 2026-03-15 20:04  peter_shen  阅读(4)  评论(0)    收藏  举报