zoukankan      html  css  js  c++  java
  • bzoj 1042 DP+容斥原理

    我们可以先DP预处理出W[I]代表买I的东西,每种钞票的个数

    不做限制的方案数,那么对于每一组数据的限制,我们可以知道

    W[S-C[I]*(D[I]+1)]C为面值,D为数量,这个代表第I种钞票一定

    超了的方案数,那么假设我们用二进制来表示对于四种钞票的限制情况

    0000表示都不限制,1000代表第一种必须用超,其余没有限制

    我们要求的是都限制的请款

    那么根据容斥原理,我们可以知道答案是都不限制的-有奇数个1的情况+偶数个1的情况

    dfs处理16种情况就好了

    /**************************************************************
        Problem: 1042
        User: BLADEVIL
        Language: Pascal
        Result: Accepted
        Time:68 ms
        Memory:1008 kb
    ****************************************************************/
     
    //By BLADEVIL
    var
        i, j                        :longint;
        c, d                        :array[0..5] of longint;
        t, s                        :longint;
        w                           :array[0..100010] of int64;
        ans                         :int64;
         
    procedure dfs(now,sum,flag:longint);
    begin
        if sum<0 then exit;
        if now=5 then
        begin
            if flag=0 then
                ans:=ans+w[sum] else
                ans:=ans-w[sum];
            exit;
        end;
        dfs(now+1,sum,flag);
        dfs(now+1,sum-c[now]*(d[now]+1),flag xor 1);
    end;
         
    begin
        for i:=1 to 4 do read(c[i]);
        read(t);
        w[0]:=1;
        for i:=1 to 4 do
            for j:=c[i] to 100000 do w[j]:=w[j]+w[j-c[i]];
         
        for i:=1 to t do
        begin
            for j:=1 to 4 do read(d[j]);
            read(s);
            ans:=0;
            dfs(1,s,0);
            writeln(ans);
        end;
    end.
  • 相关阅读:
    Python 反射
    Python 类描述符-Descriptor
    Python 面向对象三大特性-多态
    Python 面向对象三大特性-继承
    Python 面向对象三大特性-封装
    面向对象编程
    python之mysqldb模块安装
    Redis应用-分布式锁
    ide phpStorm使用git的命令行工具
    mysql中用命令行复制表结构(数据)
  • 原文地址:https://www.cnblogs.com/BLADEVIL/p/3490006.html
Copyright © 2011-2022 走看看