bzoj1042 排列組合 容斥原理

2021-07-24 03:53:19 字數 661 閱讀 6102

這道題首先使用dp預處理,先求出,在不考慮每種硬幣個數的限制的情況下,構成每個錢數有多少種拼湊方案。

對於乙個d1,我們減去不合法的,也就是這種硬幣出現了d1+1及以上個,就是減去f【s-(d1+1)*c1】,以此類推

為了避免重複的方案被轉移,所以我們以硬幣種類為第一層迴圈,這樣階段性的增加硬幣。

一定要注意這個第一層迴圈要是硬幣種類,並且初始 f[0] = 1。

#include#include#include#includeusing namespace std;

typedef long long ll;

int c[5],d[5],s,tot;

ll f[100005];

int main()

printf("%lld\n",ans);

} return 0;

}

總結:

1:對於排列組合問題,容斥思想要長存

2:在一些計數的問題,for迴圈的順序會直接導致,f【i】所代表方案數的意義的不同。(比如這道題我們對於每一種方案的不同只是他們的數量不同影響的,他們放在一起的順序是不影響的,而如果將預處理的兩個迴圈調換一下位置,就導致也成了順序影響了,就不一樣的,這種需要多才、考慮一下,而我們乙個物品乙個物品的來,就可以保證只是數量影響了)

3:

BZOJ 1042 硬幣購物 (數論 容斥)

time limit 10 sec memory limit 162 mb description 硬幣購物一共有4種硬幣。面值分別為c1,c2,c3,c4。某人去商店買東西,去了tot次。每次帶di枚ci硬幣,買s i的價值的東西。請問每次有多少種付款方法。input 第一行 c1,c2,c3,c...

BZOJ1042 硬幣購物(動態規劃,容斥原理)

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

8 排列組合

1 2 permutations 3 排列組合 4 輸入abc,輸出所有可能的排列結果 5 輸入 abc 6 輸出 abc 7 acb 8 bac 9 bca 10 cab 11 cba 12 1314 include15 16using namespace std 1718 int c1 0 19...