zoukankan      html  css  js  c++  java
  • HDU2845 Beans 动态规划

    对于每一个点由其上一步的结点传递过来,存在最优子结构,即对于正确路径的上的任意一点将都是最优的,并且存在最优子结构。保留最优值的时候注意方法,不然TLE。

    代码如下:

    #include <cstdio>
    #include <cstdlib>
    #include <cmath>
    #include <cstring>
    #include <iostream>
    #define MAXN 200000
    using namespace std;
    
    int N, M, dp[MAXN+5], G[MAXN+5], mm[MAXN+5];
    
    inline int max(int x, int y)
    {
        return x > y ? x : y;
    }
    
    void update(int x, int y) 
    { 
        dp[x*M+y] = G[x*M+y];
        for (int i = x-3; i <= x-2; ++i) {
            if (i < 0) {
                continue;
            }
            dp[x*M+y] = max(dp[x*M+y], mm[i]+G[x*M+y]); 
        } 
        dp[x*M+y] = max(dp[x*M+y], mm[x]+G[x*M+y]);  
    }
    
    int DP()
    {
        int res = 0;
        for (int i = 0; i < N; ++i) {
            mm[i] = 0;
            for (int j = 0; j < M; ++j) {
                update(i, j);
                if (j > 0) {
                    mm[i] = max(mm[i], dp[i*M+j-1]);
                }
            } 
            mm[i] = max(mm[i], dp[i*M+M-1]);
            res = max(res, mm[i]);
        }
        return res;
    }
    
    int main()
    {
        while (scanf("%d %d", &N, &M) == 2) {
            memset(dp, 0, sizeof (dp));
            for (int i = 0; i < N; ++i) {
                for (int j = 0; j < M; ++j) {
                    scanf("%d", &G[i*M+j]);
                }
            }
            printf("%d\n", DP());
        }
        return 0;
    }
  • 相关阅读:
    windows10输入法评价
    找水王
    团队项目第九天
    团队项目第八天
    团队项目第七天
    团队项目第六天
    团队项目第四天
    团队项目第五天
    团队项目第三天
    团队项目第二天
  • 原文地址:https://www.cnblogs.com/Lyush/p/2467080.html
Copyright © 2011-2022 走看看