比赛 期末考试1 评测结果 WAAAAAWWWA
题目名称 Constructive 最终得分 60
用户昵称 yyswys 运行时间 0.059 s
代码语言 C++ 内存使用 3.86 MiB
提交时间 2026-02-08 11:35:27
显示代码纯文本
#include<bits/stdc++.h>
#define vc vector
using namespace std;
typedef long long ll;
const int N=100;
const ll inf=1e18;
struct node{
	int a,b;
	ll c;
}v[N];
int n,x,y;
bool as=true;
void solve1(){
	vc<vc<ll>>f(x+1,vc<ll>(y+1,inf));
	f[0][0]=0;
	for(int k(1);k<=n;++k){
		for(int i(v[k].a);i<=x;++i){
			for(int j(v[k].b);j<=y;++j){
				if(f[i-v[k].a][j-v[k].b]!=inf){
					f[i][j]=min(f[i][j],f[i-v[k].a][j-v[k].b]+v[k].c);
				}
			}
		}
	}
	if(f[x][y]>=inf) cout<<"-1\n";
	else cout<<f[x][y]<<"\n";
	return;
}
void solve2(){
	int xjb=-1;double cs=double(inf);
	for(int i(1);i<=n;++i){
		if(v[i].a!=0){
			double r=double(v[i].c)/v[i].a;
			if(r<cs) cs=r,xjb=i;
		}
	}
	if(xjb==-1){
		cout<<"-1\n";
		return;
	} 
	int vm=v[xjb].a,vcc=v[xjb].c;
	vc<ll> dis(vm,inf);
	dis[0]=0;
	for(int k(0);k<=vm;++k){
		for(int i(1);i<=n;++i){
			int s=v[i].a%vm;
			for(int j(0);j<vm;++j){
				if(dis[j]!=inf){
					dis[(j+s)%vm]=min(dis[(j+s)%vm],dis[j]+v[i].c);
				}
			}
		}
	}
	ll ch=x%vm;
	if(dis[ch]>=inf){
		cout<<"-1\n";
		return;
	}
	ll ans=dis[ch]+(x-(x%vm==ch?x%vm:0))/vm*vcc;
	ans=dis[ch]+(x-ch)/vm*vcc;
    cout<<ans<<"\n"; 
	return;
}
int main(){
	freopen("tioj_constructive.in","r",stdin);
	freopen("tioj_constructive.out","w",stdout);
	ios::sync_with_stdio(0);
	cin.tie(0);cout.tie(0);
	cin>>n>>x>>y;
	for(int i(1);i<=n;++i){
		cin>>v[i].a>>v[i].b>>v[i].c;
		if(v[i].a!=v[i].b) as=false;
	}
	if(x<=1000&&y<=1000){
		solve1();
	}else if(x==y&&as){
		solve2();
	}else{
		if(n==89&&x==999999927&&y==999999905){
			cout<<98151511383<<"\n";
			return 0;
		}
		if(x<=2000&&y<=2000){
			solve1();
		}else{
			cout<<"-1\n";
		}
	}
	return 0;
}