• 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.
  • 相关阅读:
    vue中使用vuepdf插件显示pdf
    vuecirclemenu漂亮的圆形菜单
    console.log输出彩色字,图片等
    项目开发之使用 maven
    用 C 扩展 python
    Flash 与 php 使用 amfphp
    纯命令行的编辑利器:用好 awk 与 sed
    远程调试Java程序
    .net core 项目文件结构浅析
    初识Redis系列之一:简单介绍
  • 原文地址:https://www.cnblogs.com/BLADEVIL/p/3490006.html
Copyright © 2020-2023  润新知