求条玄关
查看原帖
求条玄关
1428495
KMYC楼主2025/8/4 18:34
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=10010;
int n,p[N],a[N],b[N],sum[N]; 
int f[N][1010];
signed main(){
	ios::sync_with_stdio(false),cin.tie(0),cout.tie(0); 
	cin>>n;
	for(int i=1;i<=n;i++) cin>>p[i]>>a[i]>>b[i],sum[i]=sum[i-1]+b[i];
	sum[n+1]=9e18;
	for(int i=1;i<=1000;i++) f[n+1][i]=i;
	for(int i=n;i>=1;i--){
		for(int j=0;j<=1000;j++){
			if(j<=p[i]) f[i][j]=f[i+1][j+a[i]];
			else f[i][j]=f[i+1][max(0ll,j-b[i])];
		}
	}
	int q;cin>>q;
	while(q--){
		int x;cin>>x;
		if(x<=1000) cout<<f[1][x];
		else{
			int pos=lower_bound(sum+1,sum+1+n,x-1000)-sum;
			if(pos==n+1) cout<<x-sum[n];
			else cout<<f[pos][max(0ll,x-sum[pos-1])];
		}
		cout<<"\n";
	}
	return 0;
}
2025/8/4 18:34
加载中...