作业介绍

二进制优化 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 小时