题解 | #【模板】完全背包#

【模板】完全背包

https://www.nowcoder.com/practice/237ae40ea1e84d8980c1d5666d1c53bc

#include <stdio.h>
#include <limits.h>
int max(int a, int b) {
    return (a > b ? a : b);
}
int main() {
    int n, m;
    scanf("%d %d", &n, &m);
    int v[n + 1], w[n + 1], dp[m + 1];
    v[0] = 0, w[0] = 0;
    for (int i = 0; i <= m; i++) {
        dp[i] = 0;
    }
    for (int i = 1; i <= n; i++) {
        
        scanf("%d %d", &v[i], &w[i]);
    }
    for (int i = 1; i <= n; i++) {
        for (int j = v[i]; j <= m; j++) {
            
           
                dp[j] = max(dp[j],dp[j-v[i]]+w[i]);
            

        }
        }
    
    printf("%d\n", dp[m]);
    
        dp[0] = 0;
    
    for (int i = 1; i <= m; i++) {
        dp[i] = INT_MIN;
    }
    for (int i = 1; i <= n; i++) {
        for (int j = v[i]; j <= m; j++) {
           
                dp[j] = max(dp[j],dp[j-v[i]]+w[i]);
            
           
        }
    }
    printf("%d", (dp[m] > 0 ? dp[m] : 0));

    return 0;
}

全部评论

相关推荐

高斯林的信徒:问你有没有保底,好人啊,就差把这是kpi面告诉你了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务