| 比赛 |
期末考试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;
}