题意:
给 n,a,b,c四个数,n为已有的书的数目,问再买k本书所需花费最少是多少,(k+n)%4==0;
有三种套餐
第一种只有一本书,花费a
第二种有两本书,花费b,
第三种有三本书,花费c.
暴力,n,k只有四种情况:n=0,k=0; n=1,k=3; n=2,k=2; n=3,k=1;
n=0时,不用买;
n=1时,有三种买法可以可能出现最优解:3*a; a+b; c;
n=2时,有三种买法可以可能出现最优解: 2*a; b; 2*c;
n=3时,有三种买法可以可能出现最优解: a; b+c; 3*c;
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<cmath> 5 #include<algorithm> 6 #include<map> 7 #include<vector> 8 #include<set> 9 #define ll long long 10 using namespace std; 11 const ll N=1e9+10; 12 int main() 13 { 14 ll n,a,b,c,d,ans; 15 while(~scanf("%lld%lld%lld%lld",&n,&a,&b,&c)) 16 { 17 ans=1e12; 18 n=n%4; 19 //cout<<n<<endl; 20 if(n==1) 21 { 22 ans=min(3*a,ans); 23 ans=min(a+b,ans); 24 ans=min(c,ans); 25 } 26 else if(n==2) 27 { 28 ans=min(2*a,ans); 29 ans=min(b,ans); 30 ans=min(2*c,ans); 31 } 32 else if(n==3) 33 { 34 ans=min(a,ans); 35 ans=min(b+c,ans); 36 ans=min(3*c,ans); 37 } 38 else 39 ans=0; 40 printf("%lld ",ans); 41 } 42 return 0; 43 }