求助
查看原帖
求助
415964
张驰昊楼主2021/12/1 16:44
#include<iostream> 

using namespace std;
long long a,n,b,c,d,ans=0;
long long a1,b1,c1,d1;
void exchang(){
	if(n==0) return ;
	if(n<a1) a1=n;
	if(n<c1) c1=n;
	return ;
}
void back(long long a2,long long b1,long long c1,long long d1){
	//cout<<'1';
	long long dans=ans,dn=n;
	while(dn>=0&&dans>=ans){
		dn+=a2;
		dans-=b1;    
		if(dn<=0) dn-=a2; dans+=b1; break;
		dans+=(dn/c1)*d1;
		dn%=c1;
	}
	if(dans<=ans){
		//cout<'1';//
		ans=dans;
		n=dn;
	}
}
/*void dod(){
	long long  dn=ans,dn=n;
	while(dn!=0||dn>=ans){
		dn+=c;
		dn-=d;
		if(dn<=0) break;
		dn+=(dn/a)*b;
		dn%=a;
	}
	if(dn<=ans){
		ans=dn;
		n=dn;
	}
}
*/
void working(long long ax,long long bx,long long cx,long long dx){
	a1=ax; b1=bx; c1=cx; d1=dx;
	ans+=(n/a1)*b1;
		n%=a1;
		exchang();
		if(n!=0&&(n/c1)*d1<=b1)
		{
			ans+=(n/c1)*d1;
			n%=c1; 
			if(n!=0)
				back(c1,d1,a1,b1);
			if(n!=0)
				ans+=d1; n=0;
		}
		if(n!=0) ans+=b1; n=0;
}
int main(){
	cin>>n>>a>>b>>c>>d;
	exchang();
	if(n<=a||n<=c)
	{
		if(b>d)
			ans+=d; 
		else
			ans+=b;
		cout<<ans;
		return 0;
	}
	if(b*c<d*a){
		working(a,b,c,d);
	}
	else
	{
		working(c,d,a,b);
	}
	cout<<ans;
	return 0; 
}
2021/12/1 16:44
加载中...