有n本书 再买k本 为4的倍数 minn花费
1本 a 2本 b 3本 c a,b,c<=1e9
n%4==0 0
先不确定买的本数
余1 3 7
余2 2 6
余3 1 5 9
https://codeforces.com/contest/740/standings
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n,a,b,c,cnt,res;
int main()
{
cin>>n>>a>>b>>c;
n=n%4;
if(n==0){
cout<<0<<endl;
}
else if(n==3){ //1 5 9
cout<<min({a,b+c,3*c})<<endl;
}
else if(n==2){ //2 6
cout<<min({2*a,b,2*c})<<endl;
}
else if(n==1){ //3 7
cout<<min({3*a,a+b,c,c+2*b})<<endl;
}
return 0;
}
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=3005;
const ll inf=1e18+5;
#define rep(i,a,n) for(int i=a;i<=n;i++)
ll n,a,b,c,cnt,res;
ll dp[maxn],ans;
int main()
{
cin>>n>>a>>b>>c;
if(n%4==0)
return cout<<0<<endl,0;
ans=inf;
rep(i,1,3000)
dp[i]=inf;
rep(i,1,3000){
if(i>=1) dp[i]=min(dp[i],dp[i-1]+a);
if(i>=2) dp[i]=min(dp[i],dp[i-2]+b);
if(i>=3) dp[i]=min(dp[i],dp[i-3]+c);
if((n+i)%4==0) ans=min(ans,dp[i]);
}
cout<<ans<<endl;
return 0;
}