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


    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2845

    分析:题目意思就是不能有任何两个数在相邻的行邻的列中,先对某一行分析,如果先取了第1个数,则接下来可以取第3或4个数(因为求所有取的数之和最大,所以不可能一下跳过3个以上),如果先取第2个数,接下来可以取第4或5个数依此类推......

    从这里可以观察到,当取到4个数时,所有取数的和的大小取决于第1个数和第2个数的大小,意思就是当取到第i个数时,和的大小取决于取到第i-3个数取到第i-2时和的大小,即c[i]=c[i]+max(c[i-2],c[i-3])那么对于每一列也同样考虑,可以得到r[i]=r[i]+max(r[i-2],r[i-3])

    #include<cstdio>
    #include<cmath>
    #include<iostream>
    using namespace std;
    int r[2000001], c[2000001];
    int main(){
        int n,m;
        while (~scanf("%d%d",&n,&m)) {
            r[0]=0;c[0]=0;
            for(int i=1; i<=n; i++) {
                for(int j=1; j<=m; j++)
                    scanf("%d",&c[j]);
                for(int j=3;j<=m; j++)
                    c[j]+=max(c[j-2],c[j-3]);
                r[i]=max(c[m-1],c[m]);
                if(i>=3)r[i]+=max(r[i-2],r[i-3]);
            }
            printf("%d\n", max(r[n],r[n-1]));
        }
        return 0;
    }
    
    
    



  • 相关阅读:
    新單詞
    custom preview link
    注冊碼
    准备用VB.Net 写一个律师管理的系统
    Windows服務
    下一步
    失败
    如何在篩選聯絡人時控制只能篩選上層客戶的聯絡人.
    如何取Lookup欄位的值
    Dynamic Picklist Sample
  • 原文地址:https://www.cnblogs.com/xinyuyuanm/p/3072041.html
Copyright © 2011-2022 走看看