bzoj 1042 HAOI2008 硬幣購物

2022-08-15 15:03:17 字數 755 閱讀 5764

這道題思路是在是神。

先dp出沒有限制時候的方案數。

dp的時候注意 先迴圈 1..4 再迴圈 1..maxs 防止重複。邊界是f[0] = 1。 這麼基礎的揹包都忘記了=_=

接下來處理有重複的問題,容斥原理

容斥原理說起來很簡單,但有一些很神奇的應用,比如這道題。

最終的答案 = 沒有限制的方案 - 其中一種超了限制的方案 + 其中兩種超了限制的方案 - 三種超了限制的方案 + 四種超了限制的方案

ans = f[s] + f[s - c[i]*(d[i]+1)]  - ……  + f[s - c[1]*(d[1]+1)……]

為什麼是 d[i]+1 呢?

至少用d[i]+1個,剩下的隨意,又是不限制的方案數了。

上**:

#include #include 

#include

#include

#include

#define n 100010

using

namespace

std;

int c[5], n, d[5

], s;

long

long f[n] = ;

void

make_f()

long

long

getans()

intmain()

return0;

}

BZOJ1042 HAOI2008 硬幣購物

description 硬幣購物一共有4種硬幣。面值分別為c1,c2,c3,c4。某人去商店買東西,去了tot次。每次帶di枚ci硬幣,買si的價值的東西。請問每次有多少種付款方法。input 第一行 c1,c2,c3,c4,tot 下面tot行 d1,d2,d3,d4,s output 每次的方法...

bzoj1042 HAOI2008 硬幣購物

time limit 10 sec memory limit 162 mb submit 1835 solved 1074 submit status discuss 硬幣購物一共有4種硬幣。面值分別為c1,c2,c3,c4。某人去商店買東西,去了tot次。每次帶di枚ci硬幣,買s i的價值的東西...

bzoj1042 HAOI2008 硬幣購物

description 硬幣購物一共有4種硬幣。面值分別為c1,c2,c3,c4。某人去商店買東西,去了tot次。每次帶di枚ci硬幣,買s i的價值的東西。請問每次有多少種付款方法。input 第一行 c1,c2,c3,c4,tot 下面tot行 d1,d2,d3,d4,s,其中di,s 1000...