已过但有疑问
查看原帖
已过但有疑问
1240139
ptxy2352010111楼主2025/8/31 21:07

60分

#include<bits/stdc++.h> 
using namespace std;
int m,n;
long long a[100],b[100],h;
long long aa[5][100],bb[5][100];
long long dp[100000];
int main(){
	cin>>m>>n;
	for(int i=1;i<=n;i++){
		int x,y,z;
		cin>>x>>y>>z;
		if(z==0){
			h++;
			a[h]=x;
			b[h]=x*y;
		}else{
			aa[0][z]++;
			aa[aa[0][z]][z]=x;
			bb[aa[0][z]][z]=x*y;
		}
	}
	for(int i=1;i<=h;i++){
		for(int j=m;j>=a[i];j--){
			dp[j]=max(dp[j],dp[j-a[i]]+b[i]);
			if(j>=a[i]+aa[1][i]){
				dp[j]=max(dp[j],dp[j-a[i]-aa[1][i]]+b[i]+bb[1][i]);
			}
			if(j>=a[i]+aa[2][i]){
				dp[j]=max(dp[j],dp[j-a[i]-aa[2][i]]+b[i]+bb[2][i]);
			}
			if(j>=a[i]+aa[1][i]+aa[2][i]){
				dp[j]=max(dp[j],dp[j-a[i]-aa[1][i]-aa[2][i]]+b[i]+bb[1][i]+bb[2][i]);
			}
		}
	}
	cout<<dp[m];
	return 0;
}

100分

#include<bits/stdc++.h> 
using namespace std;
int m,n;
int a[100000],b[100000];
int aa[5][100000],bb[5][100000];
int dp[100000];
int main(){
	cin>>m>>n;
	for(int i=1;i<=n;i++){
		int x,y,z;
		cin>>x>>y>>z;
		if(z==0){
			a[i]=x;
			b[i]=x*y;
		}else{
			aa[0][z]++;
			aa[aa[0][z]][z]=x;
			bb[aa[0][z]][z]=x*y;
		}
	}
	for(int i=1;i<=n;i++){
		if(a[i]!=0){
			for(int j=m;j>=a[i];j--){
				dp[j]=max(dp[j],dp[j-a[i]]+b[i]);
				if(j>=a[i]+aa[1][i]){
					dp[j]=max(dp[j],dp[j-a[i]-aa[1][i]]+b[i]+bb[1][i]);
				}
				if(j>=a[i]+aa[2][i]){
					dp[j]=max(dp[j],dp[j-a[i]-aa[2][i]]+b[i]+bb[2][i]);
				}
				if(j>=a[i]+aa[1][i]+aa[2][i]){
					dp[j]=max(dp[j],dp[j-a[i]-aa[1][i]-aa[2][i]]+b[i]+bb[1][i]+bb[2][i]);
				}
			}
		}
	}
	cout<<dp[m];
	return 0;
}

只是对主件的存储方式稍作改动就AC了,不知道为什么。

2025/8/31 21:07
加载中...