样例过不了求助(玄关)
查看原帖
样例过不了求助(玄关)
1287433
__ycy1124__楼主2024/9/25 11:33
#include<bits/stdc++.h>
using namespace std;
int t[6001][3];
int dp[30001];
int main(){
	int n;
	scanf("%d",&n);
	int r=0,l=0;
	for(int i=1;i<=n;i++){
		scanf("%d%d%d",&t[i][0],&t[i][1],&t[i][2]);
		int mi=1e9;
		if(t[i][0]!=0){
			mi=min(t[i][0],mi);
		}
		if(t[i][2]!=0){
			mi=min(t[i][2],mi);
		}
		if(t[i][1]!=0){
			mi=min(mi,t[i][1]);
		}
		r+=mi;
	}
	for(int i=1;i<=5*n;i++){
		dp[i]=1e9;
	}
	for(int i=1;i<=n;i++){
		for(int j=r;j>=l;j--){
			int mi=1e9;
			if(j>=t[i][0]&&t[i][0]!=0){
				mi=min(dp[j-t[i][0]],mi);
			}
			if(j>=t[i][2]&&t[i][2]!=0){
				mi=min(dp[j-t[i][2]]+t[i][2],mi);
			}
			if(t[i][1]!=0){
				mi=min(t[i][1]+dp[j],mi);
			}
			dp[j]=mi;
			if(!t[i][0]&&!t[i][1]&&!t[i][2]){
				l++;
			}
		}
	}
	int ans=1e9;
	for(int i=l;i<=r;i++){
		ans=min(ans,dp[i]);
	}
	printf("%d",ans);
	return 0;
}
2024/9/25 11:33
加载中...