求助,两个HACK都没过
查看原帖
求助,两个HACK都没过
1183074
xzy_AK_IOI楼主2024/11/9 10:44
#include<bits/stdc++.h>
using namespace std;
const int N=2e2+10;
int dp[N][N][N];
int last[N][N][N];
int a[N],b[N],c[N];
int m,v,n;
signed main(){
	cin>>m>>v>>n;
	for (int i=1;i<=n;i++) cin>>a[i]>>b[i]>>c[i];
	for (int i=1;i<=n;i++){
		for (int j=0;j<=m;j++){
			for (int k=0;k<=v;k++){
				dp[i][j][k]=dp[i-1][j][k];
				if (j>=a[i] && k>=b[i]){
					if (dp[i][j][k]<dp[i-1][j-a[i]][k-b[i]]+c[i]){
						dp[i][j][k]=dp[i-1][j-a[i]][k-b[i]]+c[i];
						last[i][j][k]=i;
					}
				}
			}
		}
	}
	int maxn=-1,w,e,r;
	for (int i=0;i<=m;i++){
		for (int j=0;j<=v;j++){
			maxn=max(maxn,dp[n][i][j]);
			w=n,e=i,r=j;
		}
	}
	cout<<maxn;
	stack <int> s;
	while (w){
		if (last[w][e][r]!=0){
			s.push(last[w][e][r]);
			int e2=e;
			e-=a[last[w][e][r]];
			r-=b[last[w][e2][r]];
			w--;
		}
		else w--;
	}
	cout<<'\n';
	while (!s.empty()){
		cout<<s.top()<<' ';
		s.pop();
	}
	return 0;
}

记录

2024/11/9 10:44
加载中...