zoukankan      html  css  js  c++  java
  • HDU 2845 Beans

    DP。

    先dp处理出每一行能得到的最大价值,再dp选择哪几行获得最大价值。

    行列选择的本质是一样的操作。

    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #include<algorithm>
    using namespace std;
    
    const int maxn=200000+10;
    int n,m;
    long long a[maxn],f[maxn],dp[maxn][2];
    long long b[maxn];
    
    long long work(int len)
    {
        long long res=0;
        dp[0][0]=dp[0][1]=0;
        for(int i=1;i<=len;i++)
        {
            dp[i][0]=max(dp[i-1][1],dp[i-1][0]);
            dp[i][1]=dp[i-1][0]+b[i];
            res=max(res,max(dp[i][0],dp[i][1]));
        }
        return res;
    }
    
    int main()
    {
        while(~scanf("%d%d",&n,&m))
        {
            for(int i=1; i<=n*m; i++) scanf("%lld",&a[i]);
            int cnt=0,hang=1;
            for(int i=1;i<=n*m;i++)
            {
                b[++cnt]=a[i];
                if(cnt==m)
                {
                    f[hang++]=work(m);
                    cnt=0;
                }
            }
            for(int i=1;i<=n;i++) b[i]=f[i];
            printf("%lld
    ",work(n));
        }
        return 0;
    }
  • 相关阅读:
    socket通信原理
    socket通信基础内容
    内核中断过程
    爬虫基础模块
    关于多个运算符的问题
    前戏
    js扩展
    加密
    django之form
    Django
  • 原文地址:https://www.cnblogs.com/zufezzt/p/5448632.html
Copyright © 2011-2022 走看看