[HAOI2008] 硬币购物

  • Post author:
  • Post category:其他

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define N 100003
int c[5],T,d[5],s;
ll f[N],ans;
int F(int num){
    return c[num]*(d[num]+1);
}
int main(){
    for(int i=1;i<=4;i++) scanf(“%d”,&c[i]);
    scanf(“%d”,&T);
    f[0]=1;
    for(int i=1;i<=4;i++)
        for(int j=c[i];j<N;j++)
            f[j]+=f[j-c[i]];
    while(T–){
        for(int i=1;i<=4;i++) scanf(“%d”,&d[i]);
        scanf(“%d”,&s);
        ans=f[s];
        for(int i=1;i<=15;i++){
            int cnt=s,k=0;
            for(int tmp=i,j=1;tmp;tmp>>=1,j++)
                if(tmp&1) k^=1,cnt-=F(j);
            if(cnt>=0) k?ans-=f[cnt]:ans+=f[cnt];
        }
        printf(“%lld\n”,ans);
    }
    return 0;
}


版权声明:本文为m0_74821245原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。