为什么不用滚动数组就不对呢?
查看原帖
为什么不用滚动数组就不对呢?
804108
__yelan__楼主2023/8/30 00:33
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=105;
int n,C,dp[1000][10000];
int w[N],c[N],m[N],new_n;
int neww[N],newc[N],newm[N];
signed main(){
	cin>>n>>C;
	for(int i=1;i<=n;i++) cin>>w[i]>>c[i]>>m[i];
	int newn=0;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m[i];j<<=1){
			m[i]-=j;
			newc[++newn]=j*c[i];
			neww[newn]=j*w[i];
		}
		if(m[i]){
			newc[++newn]=m[i]*c[i];
			neww[newn]=m[i]*w[i];
		}
	}
	for(int i=1;i<=newn;i++){
		for(int j=0;j<=C;j++){
			if(newc[i]>j) dp[i][j]=dp[i-1][j];
			else dp[i][j]=max(dp[i-1][j],dp[i-1][j-newc[i]]+neww[i]);
		}
	}
	cout<<dp[newn][C];
    return 0;
}
2023/8/30 00:33
加载中...