传送门

题意简述:有四种面值的硬币,现在qqq次询问(q≤1000)(q\le1000)(q≤1000),每次给出四种硬币的使用上限问最后刚好凑出sss块钱的方案数(s≤100000)(s\le100000)(s≤100000).


思路:先跑完全背包预处理出所有硬币都无限制时候的答案。

然后每次询问的时候枚举容斥掉多算的情况即可。

代码:

#include<bits/stdc++.h>
using namespace std;
long long tot,c[5],d[5],s,dp[100005];
inline long long f(long long i){return c[i]*(d[i]+1);}
int main(){
    scanf("%lld%lld%lld%lld%lld",&c[1],&c[2],&c[3],&c[4],&tot);
    dp[0]=1;
    for(int i=1;i<=4;++i)for(int j=c[i];j<=100005;++j)dp[j]+=dp[j-c[i]];
    while(tot--){
        long long ans=0;
        scanf("%lld%lld%lld%lld%lld",&d[1],&d[2],&d[3],&d[4],&s);
        ans=dp[s];
        if(s-f(1)>=0)ans-=dp[s-f(1)];
        if(s-f(2)>=0)ans-=dp[s-f(2)];
        if(s-f(3)>=0)ans-=dp[s-f(3)];
        if(s-f(4)>=0)ans-=dp[s-f(4)];
        if(s-f(1)-f(2)>=0)ans+=dp[s-f(1)-f(2)];
        if(s-f(1)-f(3)>=0)ans+=dp[s-f(1)-f(3)];
        if(s-f(1)-f(4)>=0)ans+=dp[s-f(1)-f(4)];
        if(s-f(2)-f(3)>=0)ans+=dp[s-f(2)-f(3)];
        if(s-f(2)-f(4)>=0)ans+=dp[s-f(2)-f(4)];
        if(s-f(3)-f(4)>=0)ans+=dp[s-f(3)-f(4)];
        if(s-f(1)-f(2)-f(3)>=0)ans-=dp[s-f(1)-f(2)-f(3)];
        if(s-f(4)-f(2)-f(3)>=0)ans-=dp[s-f(4)-f(2)-f(3)];
        if(s-f(1)-f(2)-f(4)>=0)ans-=dp[s-f(1)-f(2)-f(4)];
        if(s-f(1)-f(4)-f(3)>=0)ans-=dp[s-f(1)-f(4)-f(3)];
        if(s-f(1)-f(2)-f(3)-f(4)>=0)ans+=dp[s-f(1)-f(2)-f(3)-f(4)];
        printf("%lld\n",ans);
    }
    return 0;
}

2019.02.09 bzoj1042: [HAOI2008]硬币购物(完全背包+容斥原理)的更多相关文章

  1. BZOJ1042 [HAOI2008]硬币购物 完全背包 容斥原理

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1042 题目概括 硬币购物一共有4种硬币.面值分别为c1,c2,c3,c4.某人去商店买东西,去了t ...

  2. Luogu-P1450 [HAOI2008]硬币购物-完全背包+容斥定理

    Luogu-P1450 [HAOI2008]硬币购物-完全背包+容斥定理 [Problem Description] 略 [Solution] 上述题目等价于:有\(4\)种物品,每种物品有\(d_i ...

  3. BZOJ1042 [HAOI2008]硬币购物 【完全背包 + 容斥】

    1042: [HAOI2008]硬币购物 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 2924  Solved: 1802 [Submit][St ...

  4. BZOJ 1042 [HAOI2008]硬币购物(完全背包+容斥)

    题意: 4种硬币买价值为V的商品,每种硬币有numi个,问有多少种买法 1000次询问,numi<1e5 思路: 完全背包计算出没有numi限制下的买法, 然后答案为dp[V]-(s1+s2+s ...

  5. [bzoj1042][HAOI2008][硬币购物] (容斥原理+递推)

    Description 硬币购物一共有4种硬币.面值分别为c1,c2,c3,c4.某人去商店买东西,去了tot次.每次带di枚ci硬币,买si的价值的东西.请问每次有多少种付款方法. Input 第一 ...

  6. bzoj1042: [HAOI2008]硬币购物

    #include <iostream> #include <cstdio> #include <cstring> #include <cmath> #i ...

  7. BZOJ1042:[HAOI2008]硬币购物(DP,容斥)

    Description 硬币购物一共有4种硬币.面值分别为c1,c2,c3,c4.某人去商店买东西,去了tot次.每次带di枚ci硬币,买si的价值的东西.请问每次有多少种付款方法. Input 第一 ...

  8. 【BZOJ】1042: [HAOI2008]硬币购物(dp+容斥原理)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1042 一开始写了个O(nv)的背包,果断tle... 看了题解,,好神..用了组合数学中的多重集合方 ...

  9. BZOJ-1042:硬币购物(背包+容斥)

    题意:硬币购物一共有4种硬币.面值分别为c1,c2,c3,c4.某人去商店买东西,去了tot次.每次带di枚ci硬币,买si的价值的东西.请问每次有多少种付款方法. 思路:这么老的题,居然今天才做到. ...

随机推荐

  1. Flask中的蓝图(BluePrint)、

    蓝图 1.初识Flask蓝图(BluePrint) 创建一个项目然后将目录结构做成: user.py中的内容 from flask import Blueprint, render_template ...

  2. 善于利用python中的os模块

    作为一个程序猿,平时善于利用python中的os模块进行路径等操作,会省去很多麻烦,下面总结一下我平时经常用到的方法: import os os.getcwd() # 获取当前文件所在的目录 os.p ...

  3. Docker基础入门

    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是完全使用沙箱机制,相互之间不会有任何 ...

  4. 在.NET 4中用IIS部署WCF就这么简单

    在.NET 3.5中,我们需要这样做: 1. 添加一个HelloService.svc文件,添加ServiceHost标记,在Service中添加WCF服务实现的名称,比如: <%@ Servi ...

  5. windows安装ssh工具opensssh

    本篇教程将告诉你如何在Windows 10设备上启用SSH,让您可以通过命令提示符连接到远程服务器 工具/原料   首先你需要下载windows版本的OpenSSH, 本教程以7.2p1-1版本为例 ...

  6. 【python-sql】sql操作时遇到的坑

    针对python的sql语句的封装以及调用: python的db操作类: # -*- coding: utf-8 -*- # coding=utf-8 import MySQLdb class Dat ...

  7. 【linux C】C语言中常用的几个函数的总结【二】

    3.fgets 虽然用 gets() 时有空格也可以直接输入,但是 gets() 有一个非常大的缺陷,即它不检查预留存储区是否能够容纳实际输入的数据,换句话说,如果输入的字符数目大于数组的长度,get ...

  8. eclipse启动出现Could not read metadata for ……

    Could not read metadata for …… E:\workspace\.metadata\.plugins\org.eclipse.core.resources\.projects\ ...

  9. 当前的开源SLAM方案

    开源方案 传感器形式 地址链接 MonoSLAM 单目 https://github.com/hanmekim/SceneLib2  PTAM 单目  http://www.robots.ox.ac. ...

  10. Extjs如何添加多个Vtype

    http://devjs.eu/en/multiple-validation-multi-vtype-for-textfield-in-ext-js-4/