p1450 [haoi2008]硬幣購物
完全揹包+容斥
真是秒呀
方案數統計。如果無法直接計算出來,可以嘗試使用容斥原理進行拼湊。
你看,這個題中的對答案有影響的元素只有4個。
\(2^n\)次方的容斥完全可以做
我們可以使用所有的方案數,減去乙個硬幣不合法的方案數,加上兩個硬幣不合法的方案數,然後如此搞一搞
就可以了。
#include#include#include#includeconst int maxn=101000;
long long f[maxn+1000];
long long d[5],d[5];
int main()
*/ for(int i=0;i<=3;i++)
for(int j=d[i];j<=maxn;j++)
f[j]+=f[j-d[i]];//不考慮限制
for(int i=1;i<=tot;i++)
if(c<0) continue;
ans=ans+(t ? -1 : 1)*f[c];//進行容斥
}printf("%lld\n",ans);
}}
P1450 HAOI2008 硬幣購物
完全揹包和容斥原理的結合 可以看乙個區間相減的 其實是錯的,但是好理解 求 2,3 2,3 2,3 轉換為求 2,3,2,3 begin 2,infty 3,infty rightarrow 2,3 end 2,3 2,3 f s f s f s 表示買s ss的東西有多少種方案 在每種錢都有無限的...
題解 P1450 HAOI2008 硬幣購物
本題想到多重揹包還是很容易的 什麼?不知道多重揹包?但是,另一題解已經將時間安排計算地明明白白 所以想到完全揹包 多重揹包跟01揹包似乎區別不大 可以先預處理完全揹包的情況,然後瞎搞容斥原理 不懂容斥原理的看這裡 傳送門 想到完全揹包和容斥原理後,剩下的就只是打表一些簡單的實現了 上 include...
洛谷P1450 HAOI2008 硬幣購物
硬幣購物一共有4種硬幣。面值分別為c1,c2,c3,c4。某人去商店買東西,去了tot次。每次帶di枚ci硬幣,買si的價值的東西。請問每次有多少種付款方法。輸入格式 第一行 c1,c2,c3,c4,tot 下面tot行 d1,d2,d3,d4,s 輸出格式 每次的方法數 輸入樣例 1 1 2 5 ...