作业介绍
二进制优化 plus
#include<iostream>
using namespace std;
int dp[10005];
int a[10005][3]; // 体积 价值 数量
int main(){
int n,V;
cin>>n>>V;
for(int i=1;i<=n;i++) cin>>a[i][0]>>a[i][1]>>a[i][2];
// 物品种类
for(int i=1;i<=n;i++){
int k = a[i][2];
// 二进制分组
for(int m=1;k > 0;m<<=1){
int t = min(m, k);
// 01背包
for(int j=V;j>=1;j--){
if(j>=a[i][0]*t) dp[j] = max(dp[j], dp[j-a[i][0]*t]+a[i][1]*t);
}
k -= m;
}
}
cout<<dp[V];
return 0;
}
- 状态
- 已结束
- 题目
- 5
- 开始时间
- 2025-1-20 18:30
- 截止时间
- 2025-1-31 23:59
- 可延期
- 24 小时