思路:你可以直接暴力枚举所有情况就能出来,情况也不多。我这里是直接背包出答案。下面给代码:
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<iostream>
#include<cmath>
#include<queue>
#include<functional>
typedef long long LL;
using namespace std;
#define maxn 200005
#define ll l,mid,now<<1
#define rr mid+1,r,now<<1|1
#define lson l1,mid,l2,r2,now<<1
#define rson mid+1,r1,l2,r2,now<<1|1
#define pi 3.14159
#define inf 0x3f3f3f3f
const int mod = 1e9 + 7;
int main(){
int n,a[3];
scanf("%d%d%d%d",&n,&a[0],&a[1],&a[2]);
n%=4;
if(n)
n=4-n;
LL dp[15];
memset(dp,inf,sizeof(dp));
dp[0]=0;
for(int i=0;i<3;i++){
for(int j=0;j<=n+8;j++){
if(j-(i+1)>=0)
dp[j]=min(dp[j],dp[j-(i+1)]+a[i]);
}
}
LL ans=min(dp[n],dp[n+4]);
ans=min(ans,dp[n+8]);
printf("%lld\n",ans);
}