每日一题————2026-7-5 多重背包问题

📅 2026/7/6 2:45:03
每日一题————2026-7-5 多重背包问题
多重背包问题题目描述有N种物品。第i种物品的重量为w_i 价值为v_i数量为s_i 。选一些物品装到一个承重量为C的背包使得背包内物品在总重量不超过C的前提下价值尽量大。 1≤N≤500 1≤w_i≤C≤6000, 1≤v_i≤10^3 0≤s≤10 。输入格式第一行是两个整数N和CN≤5001C≤6000接下来N行每行3个整数w_i、v_i、s_i。1≤w_i≤C≤6000, 1≤v_i≤10^3 0≤s≤10 。输出格式一个整数 代表最大总价值。输入输出样例输入样例15 1000 80 20 4 40 50 9 30 50 7 40 30 6 20 20 1输出样例11040【耗时限制】1000ms 【内存限制】256MB参考AC代码:#include bits/stdc.husing namespace std;using LL long long;LL n, c, tv, tw, ts, v[5000 10], tot, dp[6010], w[5000 10];int main(){scanf (%lld %lld, n, c);for (LL i 1;i n;i ){scanf (%lld %lld %lld, tw, tv, ts);LL num min(c / tw, ts);for (LL j 1;j num;j * 2){//j 1也行v[ tot] j * tv;w[tot] j * tw;num - j;}v[ tot] num * tv;w[tot] num * tw;}for (LL i 1;i tot;i ){for (LL j c;j w[i];j --){dp[j] max(dp[j], dp[j - w[i]] v[i]);}}cout dp[c];return 0;}鼓励大家先独立完成不要照抄哦