思路:模板题,利用二进制优化

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=100010;

int w[N],v[N],dp[N];
int main(){
	ios::sync_with_stdio(0);
	cin.tie(0);cout.tie(0);
	int n,m;
	cin >> n >> m;
	
	int cnt = 0;
	for(int i = 1; i <= n; i ++){
		int a,b,c;
		cin >> a >> b >> c;
		int k = 1; 
		while(k <= a){
			cnt ++;
			v[cnt] = b * k;
			w[cnt] = c * k;
			a -= k;
			k *= 2;
		}
		if(a){
			cnt ++;
			v[cnt] = b * a;
			w[cnt] = c * a;
		}
	}
	n = cnt;
	for(int i = 1; i <= n; i ++){
		for(int j = m; j >= v[i]; j --){
			dp[j] = max(dp[j],dp[j - v[i]] + w[i]);
		}
	}
	cout << dp[m];
	return 0;
}