#HDU 2845 Beans 最大不连续子列和

来源:互联网 发布:同济启明星软件 编辑:程序博客网 时间:2024/05/18 23:16

Beans

题意&分析:

玩“吃豆子”的游戏,规则如图:

对于这个二维的问题,我们可以分别对行列做两次dp。先对每一行求出最大的不连续子列和(转移方程:r[ i ] = max( r[ i - 2 ] + r[ i ], r[ i - 1] ),i>=2),注意下标范围。然后对每一行的最大值求最大不连续子列和,思路同上。

代码如下:

#include <bits/stdc++.h>#define INF 0x3f3f3f3f#define TEST cout<<"stop here"<<endl using namespace std;typedef long long ll;const ll mod = 1e9 + 7;int r[200010],c[200010];int main(){    std::ios::sync_with_stdio(false);    std::cin.tie(0);    int m,n;    while(cin>>m>>n){        memset(r,0,sizeof(r));        memset(c,0,sizeof(c));        for(int i=1;i<=m;i++){            for(int j=1;j<=n;j++){                cin>>r[j];            }            for(int j=2;j<=n;j++){//                r[j] = max(r[j-2] + r[j],r[j-1]);            }            c[i] = r[n];        }        for(int i=2;i<=m;i++){            c[i] = max(c[i-2] + c[i],c[i-1]);        }        cout<< c[m] <<endl;    }    return 0;}

2017/08/07

原创粉丝点击