Description

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

第一行 c1,c2,c3,c4,tot 下面tot行 d1,d2,d3,d4,s
Output

每次的方法数
Sample Input
1 2 5 10 2
3 2 3 1 10
1000 2 2 2 900
Sample Output
4
27
数据规模
di,s<=100000
tot<=1000

每一次都做一次多重背包跟定是不行的,这个先预处理一下,然后可以用容斥原理O(1)回答

我们可以这样用容斥,先算出没有限制钱币数量的方案数,记为f[i],表示没有限制,总价值为i的方案数,然后减去至少一种钱币超过限制的方案数,加上至少两种钱币超过限制的方案数,减去至少三种钱币超过限制的方案数,最后加上四种钱币都超过限制的方案数,第i种钱币超过限制就是第i种钱币至少用了di+1个(例:第1种钱币超过限制的方案数就是f[s-c[1]*(d1+1)])

犯了一个傻逼错误

求f[i]的时候我是这么求的

     for i:= to maxs do
for j:= to do
inc(f[i],fn(i-c[j]));

然后理所当然的爆了int64

为了不重复计算方案,所以应该以j为阶段(话说动态规划的阶段是什么早就忘了),就像这样

     for j:= to  do
for i:= to maxs do
inc(f[i],fn(i-c[j]));

吐槽:

R:容斥原理是什么?我们学过吗?

X:学过啊

R:额,这算学过吗,我只记得老师叫我们用容斥写在100以内是2,3,5的倍数的数有多少,然后要我们查公式,这TM有什么意思,这个题有必要做吗,换个例题不行啊

当时我就想啊,容斥这么垃圾(不要打我......),我就直接跳过了,没想到容斥原来用处挺大的啊(当时讲的那个例题毫无吸引力好吗)

 const
maxs=;
var
f:array[..maxs]of int64;
c:array[..]of longint;
n:longint;
ans:int64; function fn(x:longint):int64;
begin
if x>= then exit(f[x]);
exit();
end; procedure main;
var
i,j,d1,d2,d3,d4,s:longint;
begin
for i:= to do
read(c[i]);
f[]:=;
for j:= to do
for i:= to maxs do
inc(f[i],fn(i-c[j]));
read(n);
for i:= to n do
begin
read(d1,d2,d3,d4,s);
ans:=fn(s);
dec(ans,fn(s-c[]*(d1+)));
dec(ans,fn(s-c[]*(d2+)));
dec(ans,fn(s-c[]*(d3+)));
dec(ans,fn(s-c[]*(d4+)));
inc(ans,fn(s-c[]*(d1+)-c[]*(d2+)));
inc(ans,fn(s-c[]*(d1+)-c[]*(d3+)));
inc(ans,fn(s-c[]*(d1+)-c[]*(d4+)));
inc(ans,fn(s-c[]*(d2+)-c[]*(d3+)));
inc(ans,fn(s-c[]*(d2+)-c[]*(d4+)));
inc(ans,fn(s-c[]*(d3+)-c[]*(d4+)));
dec(ans,fn(s-c[]*(d2+)-c[]*(d3+)-c[]*(d4+)));
dec(ans,fn(s-c[]*(d1+)-c[]*(d3+)-c[]*(d4+)));
dec(ans,fn(s-c[]*(d1+)-c[]*(d2+)-c[]*(d4+)));
dec(ans,fn(s-c[]*(d1+)-c[]*(d2+)-c[]*(d3+)));
inc(ans,fn(s-c[]*(d1+)-c[]*(d2+)-c[]*(d3+)-c[]*(d4+)));
writeln(ans);
end;
end; begin
main;
end.

1042: [HAOI2008]硬币购物 - BZOJ的更多相关文章

  1. Bzoj 1042: [HAOI2008]硬币购物 容斥原理,动态规划,背包dp

    1042: [HAOI2008]硬币购物 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1747  Solved: 1015[Submit][Stat ...

  2. bzoj 1042: [HAOI2008]硬币购物 dp+容斥原理

    题目链接 1042: [HAOI2008]硬币购物 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1706  Solved: 985[Submit][ ...

  3. BZOJ 1042: [HAOI2008]硬币购物( 背包dp + 容斥原理 )

    先按完全背包做一次dp, dp(x)表示x元的东西有多少种方案, 然后再容斥一下. ---------------------------------------------------------- ...

  4. BZOJ 1042: [HAOI2008]硬币购物 [容斥原理]

    1042: [HAOI2008]硬币购物 题意:4种硬币.面值分别为c1,c2,c3,c4.1000次询问每种硬币di个,凑出\(s\le 10^5\)的方案数 完全背包方案数? 询问太多了 看了题解 ...

  5. 【BZOJ】1042: [HAOI2008]硬币购物

    1042: [HAOI2008]硬币购物 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 3307  Solved: 2075[Submit][Stat ...

  6. BZOJ 1042: [HAOI2008]硬币购物 容斥+背包

    1042: [HAOI2008]硬币购物 Description 硬币购物一共有4种硬币.面值分别为c1,c2,c3,c4.某人去商店买东西,去了tot次.每次带di枚ci硬币,买si的价值的东西.请 ...

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

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

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

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

  9. BZOJ 1042: [HAOI2008]硬币购物 (详解)(背包&容斥原理)

    题面:https://www.cnblogs.com/fu3638/p/6759919.html 硬币购物一共有4种硬币.面值分别为c1,c2,c3,c4.某人去商店买东西,去了tot次.每次带di枚 ...

随机推荐

  1. 【转】六年软件测试感悟-从博彦到VMware

    不知不觉已经从事软件测试六年了,2006毕业到进入外包公司外包给微软做软件测试, 到现在加入著名的外企.六年的时间过得真快. 长期的测试工作也让我对软件测试有了比较深入的认识.但是我至今还是一个底层的 ...

  2. JMS - Temporary Destination

    Although sessions are used to create temporary destinations, this is only for convenience. Their sco ...

  3. php 中cookie和session的用法比较

    1.cookie数据存放在客户的浏览器上,session数据放在服务器上. 2.cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗,考虑到安全应当使用session. ...

  4. iOS学习——iOS视频和推荐网站

    最近有人问有没有iOS学习的相关资料,就简单的把自己的知道的和资源共享一下: 个人感觉iOS开发人才饱和,培训泛滥,个人推荐后台升职空间大和web前端竞争小. [链接][Ronda收集整理]2014年 ...

  5. ASP.NET MVC 之控制器与视图之间的数据传递

    今天,我们来谈谈控制器与视图之间的数据传递. 数据传递,指的是视图与控制器之间的交互,包括两个方向上的数据交互,一个是把控制器的数据传到视图中,在视图中如何显示数据,一个是把视图数据传递到控制器中, ...

  6. Adapter模式

    Adapter模式主要用于将一个类的接口转换为另外一个接口,通常情况下再不改变原有体系的条件下应对新的需求变化,通过引入新的适配器类来完成对既存体系的扩展和改造.实现方式主要包括: 1.类的Adapt ...

  7. jQuery动态添加元素并绑定事件

    写网页的时候常常需要根据实际情况添加新的元素,然后这些新元素还需要绑定已有的事件,如:有一ul,点击其中某 li,根据其 id 或 value 等获取新的数据列表,并新建 ul 显示,新 ul 中的 ...

  8. poj 2431 Expedition

    Expedition Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 12980   Accepted: 3705 Descr ...

  9. vs2005_the breakpoint will not currently be hit. The source code is different from the original verison.

    公司开发只能用英文版的VS2005 (雅蠛蝶) Tool-->Options-->Debugging->General: 把Require source files to exact ...

  10. MSDN 2005 安装问题

    在安装玩Visual Studio  MSDN 2005时,经常会出现这种问题:“无法显示 Microsoft 文档资源管理器,因为指定的帮助集合“ms-help://MS.MSDNQTR.v” 网上 ...