P6767 [BalticOI 2020/2012 Day0] Roses(贪心&gcd)
Posted Harris-H
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了P6767 [BalticOI 2020/2012 Day0] Roses(贪心&gcd)相关的知识,希望对你有一定的参考价值。
P6767 [BalticOI 2020/2012 Day0] Roses(贪心&gcd)
设 m = l c m ( A , C ) m=lcm(A,C) m=lcm(A,C)
m = A t 1 = C t 2 m=At_1=Ct_2 m=At1=Ct2
花费的钱为: B t 1 , D t 2 Bt_1,Dt_2 Bt1,Dt2。
不妨设: B t 1 < D t 2 Bt_1<Dt_2 Bt1<Dt2。
所以当较劣的 D D D的个数 t 2 ′ > t 2 t_2'>t_2 t2′>t2时,显然用 B t 1 Bt_1 Bt1代替会更优秀。
所以只需要枚举 D D D的个数 t 2 ′ ∈ [ 0 , t 2 ] t_2'\\in[0,t_2] t2′∈[0,t2]即可。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int N=1e3+5,M=2e4+5,inf=0x3f3f3f3f,mod=1e9+7;
#define mst(a,b) memset(a,b,sizeof a)
#define PII pair<int,int>
#define fi first
#define se second
#define pb emplace_back
#define SZ(a) (int)a.size()
#define ios ios::sync_with_stdio(false),cin.tie(0)
void Print(int *a,int n){
for(int i=1;i<n;i++)
printf("%d ",a[i]);
printf("%d\\n",a[n]);
}
ll n,a1,b1,a2,b2,ans,mx;
int main(){
cin>>n>>a1>>b1>>a2>>b2;
long double x=b1*1.0/a1,y=b2*1.0/a2;
if(x>y) swap(a1,a2),swap(b1,b2);
ans = (n+a1-1)/a1*b1;
mx = a1 / __gcd(a1,a2);
for(ll i = mx;~i;i--){
ll tmp = i * b2;
if(n-i*a2>=0){
tmp+=(n-i*a2+a1-1)/a1*b1;
}
ans=min(ans,tmp);
}
printf("%lld\\n",ans);
return 0;
}
以上是关于P6767 [BalticOI 2020/2012 Day0] Roses(贪心&gcd)的主要内容,如果未能解决你的问题,请参考以下文章
[BalticOI 2014]Three Friends 题解