zoukankan      html  css  js  c++  java
  • poj3661

    dp

    f[i] = max(f[i], sum(i~i+j-1) + f[i + j * 2]) 或者 f[i] = f[i + 1]

    View Code
    #include <iostream>
    #include <cstdio>
    #include <cstdlib>
    #include <cstring>
    using namespace std;
    
    #define maxn 10005
    
    int n, m;
    int dis[maxn];
    int f[maxn];
    int sum[maxn];
    
    void input()
    {
        scanf("%d%d", &n, &m);
        for (int i = 1; i <= n; i++)
            scanf("%d", &dis[i]);
        sum[0] = dis[0] = 0;
        for (int i = 1; i <= n; i++)
            sum[i] = sum[i - 1] + dis[i];
    }
    
    void work()
    {
        f[n + 1] = 0;
        for (int i = n; i >= 1; i--)
        {
            f[i] = f[i + 1];
            for (int j = 1; j <= m && i + j * 2 <= n + 1; j++)
                f[i] = max(f[i], sum[i + j - 1] - sum[i - 1] + f[i + j * 2]);
        }
        printf("%d\n", f[1]);
    }
    
    int main()
    {
        //freopen("t.txt", "r", stdin);
        input();
        work();
        return 0;
    }
  • 相关阅读:
    Add Binary
    Java笔记之String
    Java笔记之数组
    Merge Two Sorted Lists
    Remove Nth Node From End of List
    Longest Common Prefix
    Roman to Integer
    Palindrome Number
    Reverse Integer
    _cdel stdcall
  • 原文地址:https://www.cnblogs.com/rainydays/p/2582943.html
Copyright © 2011-2022 走看看