zoukankan      html  css  js  c++  java
  • Codeforces Round #267 (Div. 2) C. George and Job dp

    C. George and Job
    time limit per test
    1 second
    memory limit per test
    256 megabytes
    input
    standard input
    output
    standard output

    The new ITone 6 has been released recently and George got really keen to buy it. Unfortunately, he didn't have enough money, so George was going to work as a programmer. Now he faced the following problem at the work.

    Given a sequence of n integers p1, p2, ..., pn. You are to choose k pairs of integers:

    [l1, r1], [l2, r2], ..., [lk, rk] (1 ≤ l1 ≤ r1 < l2 ≤ r2 < ... < lk ≤ rk ≤ nri - li + 1 = m), 

    in such a way that the value of sum  is maximal possible. Help George to cope with the task.

    Input

    The first line contains three integers nm and k (1 ≤ (m × k) ≤ n ≤ 5000). The second line contains n integers p1, p2, ..., pn(0 ≤ pi ≤ 109).

    Output

    Print an integer in a single line — the maximum possible value of sum.

    Examples
    input
    5 2 1
    1 2 3 4 5
    output
    9
    input
    7 1 3
    2 10 7 18 5 33 0
    output
    61

     题意:找到k个区间大小为m的区间和最大值;

       思路:dp[i][t]=max(dp[i-1][t],dp[i-y][t-1]+sum[i-y+1]);

               取以第i个为区间结尾的区间;

    #include<bits/stdc++.h>
    using namespace std;
    #define ll __int64
    #define mod 1000000007
    #define esp 0.00000000001
    const int N=5e3+10,M=1e6+10,inf=1e9;
    ll dp[N][N];
    ll a[N];
    ll sum[N];
    int main()
    {
        int x,y,z,i,t;
        scanf("%d%d%d",&x,&y,&z);
        for(i=1;i<=x;i++)
        scanf("%lld",&a[i]);
        for(i=1;i<=x-y+1;i++)
        for(t=i;t<=i+y-1;t++)
        sum[i]+=a[t];
        for(i=1;i<=x;i++)
        {
            for(t=1;t<=z;t++)
            {
                if(i>=y)
                dp[i][t]=max(dp[i-1][t],dp[i-y][t-1]+sum[i-y+1]);
                else
                dp[i][t]=dp[i-1][t];
            }
        }
        printf("%lld
    ",dp[x][z]);
        return 0;
    }
  • 相关阅读:
    LeetCode 88. Merge Sorted Array
    LeetCode 75. Sort Colors
    LeetCode 581. Shortest Unsorted Continuous Subarray
    LeetCode 20. Valid Parentheses
    LeetCode 53. Maximum Subarray
    LeetCode 461. Hamming Distance
    LeetCode 448. Find All Numbers Disappeared in an Array
    LeetCode 976. Largest Perimeter Triangle
    LeetCode 1295. Find Numbers with Even Number of Digits
    如何自学并且系统学习计算机网络?(知乎问答)
  • 原文地址:https://www.cnblogs.com/jhz033/p/5635568.html
Copyright © 2011-2022 走看看