HDU 2182

#include <iostream>
#include <cstring>
#include<algorithm>
using namespace std;
const int INF = 1 <<30;
int main()
{
    int T,N,A,B,K,path[100],dp[100][100];
    cin >> T;
    while(T--){
        cin >> N >> A >> B >> K;
        for(int i = 0; i < N; i++){
            cin >> path[i];
        }
        for(int i = 0 ;  i <100; i++){
                for(int j =0; j < 100; j++)
            dp[i][j] = -INF;
        }
        for(int i =0; i <= K; i++)
        dp[i][0] = path[0];
        for(int i = 0; i< K; i++){
            for(int j = 0; j <= N - 1; j++){
                dp[i+1][j] = max(dp[i + 1][j],dp[i][j]);
                for(int m = A; m <= B; m++){
                    if(j + m <= N -1){
                        dp[i+1][m + j] = max(dp[i +1][m+j],dp[i][j] + path[m + j]);
                    }
                }
            }
        }

        cout << *max_element(dp[K],dp[K] + N) << endl;
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/ehdhg13455/article/details/81474325
今日推荐