一本通混合背包求调
  • 板块题目总版
  • 楼主liuandwang
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/4/13 09:49
  • 上次更新2024/4/13 11:27:03
查看原帖
一本通混合背包求调
737285
liuandwang楼主2024/4/13 09:49
#include<bits/stdc++.h>
using namespace std;
int dp[10000];
int main(){
//	freopen("mix.in","r",stdin);
//	freopen("mix.out","w",stdout);
	int M,N;
	cin>>M>>N;
	int W[N],C[N],P[N];
	for(int i=0;i<N;i++) cin>>W[i]>>C[i]>>P[i];
	for(int i=0;i<N;i++){
		for(int j=M;j>=W[i];j--){
			if(P[j]>=0){
				if(P[j]!=0) dp[j]=max(dp[j-min(j/W[i],P[i])]+C[i]*min(j/W[i],P[i]),dp[j]);
				else dp[j]=max(dp[j%W[i]]+C[i]*(j/W[i]),dp[j]);
				if(P[i]!=0){
					P[i]-=min(j/W[i],P[i]);
					if(P[i]==0) P[i]=-1;
				}
			}
			
		}
	}
	for(int i=0;i<=M;i++) cout<<dp[i]<<" ";
//	cout<<dp[M];
	return 0;
}
2024/4/13 09:49
加载中...