您的位置:首页 > 其它

HDU - 2182 Frog(01背包)

2015-09-24 21:07 501 查看
题目大意:有一只青蛙,刚开始在1这个位置,它只能往前跳,且跳跃的距离在[A,B],最多跳K次。它只能把它所在位置的蚊子吃了,问最多能吃多少只蚊子

解题思路:01背包裸题

[code]#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 110;

int n, a, b, k;
int num
;
int dp

;
void init() {
    scanf("%d%d%d%d", &n, &a, &b, &k);

    memset(num, 0, sizeof(num));
    int t;
    for (int i = 1; i <= n; i++) 
        scanf("%d", &num[i]);

}

void solve() {
    memset(dp, 0, sizeof(dp));
    dp[1][0] = num[1]; 

    for (int i = 1; i <= k; i++)
        for (int j = n; j >= 1; j--) { 
            dp[j][i] = dp[j][i - 1];
            if (j > a) {
                for (int l = a; l <= b; l++) 
                    if (j > l)  dp[j][i] = max(dp[j][i], dp[j - l][i - 1] + num[j]);
            }
        }

    int ans = 0;
    for (int i = 0; i <= n; i++) 
        ans = max(ans, dp[i][k]);

    printf("%d\n", ans);
}

int main() {
    int test;
    scanf("%d", &test);
    while (test--) {
        init();
        solve();
    }
    return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: