题解 | #采药#

采药

https://www.nowcoder.com/practice/d7c03b114f0541dd8e32ce9987326c16

#include<stdio.h>
int max(int a, int b) {
    if (a > b)return a;
    return b;
}
int main() {
    int C, N, maxdp = -10000;
    scanf("%d %d", &C, &N);
    int i, j, weight[N], value[N], dp[101][1001];
    for (i = 0; i < N; i++)scanf("%d %d", &weight[i], &value[i]);
    for (i = 0; i < 101; i++) {
        for (j = 0; j < 1001; j++) {
            dp[i][j] = -9999;
        }
    }
    for (i = 0; i < N; i++)dp[i][0] = 0;
    for (j = 1; j <= C; j++) {
        dp[0][j] = value[0];
        if (j - weight[0] < 0)dp[0][j] = 0;
    }
    for (i = 1; i < N; i++) {
        for (j = 1; j <= C; j++) {
            dp[i][j] = max(dp[i - 1][j],
                           j - weight[i] < 0 ? 0 : value[i] + dp[i - 1][j - weight[i]]);
        }
    }
    for (i = 0; i < 101; i++) {
        for (j = 0; j < 1001; j++) {
            if (dp[i][j] > maxdp)maxdp = dp[i][j];
        }
    }
    printf("%d\n", maxdp);
    return 0;
}

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务