BZOJ1042: [HAOI2008]硬币购物

来源:互联网 发布:苹果air网络恢复系统 编辑:程序博客网 时间:2024/06/06 03:14

容斥原理

#include<cstdio>#include<cstring>using namespace std;char c;inline void read(int&a){    a=0;do c=getchar();while(c<'0'||c>'9');    while(c<='9'&&c>='0')a=(a<<3)+(a<<1)+c-'0',c=getchar();                                                                                                                                                                  }long long f[100001];long long ans;int d[10],C[10];void DFS(int x,int k,int res){    if(res<0)return;    if(x==5)    {        if(k&1)ans-=f[res];        else ans+=f[res];        return;    }    DFS(x+1,k+1,res-(d[x]+1)*C[x]);    DFS(x+1,k,res);}int main(){    int i,T,j;    for(i=1;i<=4;i++)    read(C[i]);    read(T);    f[0]=1;    int x;    for(i=1;i<=4;i++)        for(j=C[i];j<=100000;j++)            f[j]+=f[j-C[i]];     while(T--)      {        for(i=1;i<=4;i++)          read(d[i]);        read(x);        ans=0;        DFS(1,0,x);        printf("%lld\n",ans);    }    return 0;}
0 1
原创粉丝点击