HDU 2845 最大非连续子段和 二维dp

来源:互联网 发布:软件开发书籍推荐 编辑:程序博客网 时间:2024/05/18 03:06
#include <stdio.h>#include <stdlib.h>#include <string.h>#define Maxn 200001#define Max(a,b) ((a)>(b)?(a):(b))int dp[Maxn][2];//dp[i][0] 表示不取第i个能到的最大值//dp[i][1] 表示取第i个能到的最大值int row[Maxn];int main(){int i, j, k;int M, N;int val;while(scanf("%d%d", &M, &N) != EOF){dp[0][0] = 0;dp[0][1] = 0;for(i = 1; i <= M; i++){for(j = 1; j <= N; j++){scanf("%d", &val);dp[j][0] = Max(dp[j-1][0], dp[j-1][1]);dp[j][1] = dp[j-1][0] + val; }row[i] = Max(dp[N][0], dp[N][1]);}dp[0][0] = 0;dp[0][1] = 0;for(i = 1; i <= M; i++){dp[i][0] = Max(dp[i-1][0], dp[i-1][1]);dp[i][1] = dp[i-1][0] + row[i];}printf("%d\n", Max(dp[M][1], dp[M][0]));}return 0;}


 

原创粉丝点击