HDU - 2182 Frog(01背包)

来源:互联网 发布:逍遥模拟器优化cpu 编辑:程序博客网 时间:2024/06/07 06:03

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

解题思路:01背包裸题

#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int N = 110;int n, a, b, k;int num[N];int dp[N][N];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;}
0 0
原创粉丝点击