zoukankan      html  css  js  c++  java
  • [HAOI2008]硬币购物

    通过观察数据范围,我们可以发现这个题,跑背包我们会T掉。。。

    通过观察题目我们可以发现,如果我们跑完全背包,会有许多不合法的方案。。。

    辣么,我们就容斥一下好了。。。QAQ。。。

    呆码:

    #include<iostream>
    #include<cstdio>
    #define ll long long
    using namespace std;
    
    int c[6],d[6],n,s;
    ll f[100010];
    
    int main()
    {
        for(int i=1;i<=4;i++)
            scanf("%d",&c[i]);
        scanf("%d",&n);
        f[0]=1;
        for(int i=1;i<=4;i++)
            for(int j=c[i];j<=100010;j++)
                f[j]+=f[j-c[i]];
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=4;j++)
                scanf("%d",&d[j]);
            scanf("%d",&s);
            ll ans=f[s]; 
            for(int j=1;j<=15;j++)
            {
                int tmp,k,now=s,g;
                for(tmp=j,g=1,k=0;tmp;tmp>>=1,g++)
                    if(tmp&1) k^=1,now-=(d[g]+1)*c[g];
                if(now>=0) k ? ans-=f[now] : ans+=f[now];
            }
            printf("%lld
    ",ans);
        }
    }
    代码
  • 相关阅读:
    Python-环境配置
    Linux操作系统基
    BZOJ 1572 贪心(priority_queue)
    POJ 3040 贪心
    POJ 3039 搜索??? (逼近)
    POJ 2433 枚举
    BZOJ 1571 DP
    BZOJ 1232 Kruskal
    BZOJ 1231 状压DP
    POJ 2430 状压DP
  • 原文地址:https://www.cnblogs.com/zzzyc/p/9264044.html
Copyright © 2011-2022 走看看