也許更好的閱讀體驗
\(\mathcal\)
小 \(l\) 所在的 \(l\) 國由於沒有普及移動支付,依然在大規模使用紙幣。一共有 \(n\)
種面值的紙幣,面值互不相同。一天小 \(l\) 去商店購買乙個**為 \(x\) 元的物品,
他提前知道了自己手裡和店員手裡每種面值的紙幣的數量,他想知道一共有多少
種付錢-找錢的方式。兩種付錢-找錢的方式不同,當且僅當存在一種面值,在兩
種方案中小 \(l\) 付出的該種面值的紙幣數量不同或店員找的該種面值的紙幣數量
不同。此外,設小 \(l\) 付出的紙幣面值總數為 \(y\),則小 \(l\) 付出的紙幣中不能存在
面值小於等於 \(y-x\) 的紙幣(不然就沒有必要付這張紙幣了)。
輸入格式
第一行輸入兩個正整數 \(n,x\),分別表示紙幣面值的數量以及小 l 想要購買的商品的**。
接下來 \(n\) 行每行三個整數 \(a_i,b_i,c_i\),分別表示第 i 種紙幣的面值,小 x 擁有的該種紙幣數量,店員擁有的該種紙幣數量,保證面值 \(a_i\) 單調增加。
輸出格式
一行輸出乙個整數,表示總方案數對 \(1000000007\) 取模的結果。
資料範圍
對於所有資料,滿足 \(ai>0\);
對於 \(30\%\)的資料,\(n,x,ai,bi,ci≤8\);
對於 \(60\%\)的資料,\(n,x,ai,bi,ci≤100\);
對於 \(100\%\)的資料,\(n≤1000,x,ai,bi,ci≤10000\)。
\(\mathcal\)
兩種方法
顯然的想法是做多重揹包
設\(fa_i\)表示小\(l\)能夠符合題意地湊出\(i\)元的方案數
\(fb_i\)表示店員能夠找出\(i\)元的方案數
便可以直接多重揹包
暴力\(d\)顯然會超時,用二進位制分組還是會\(t\)
法一
設列舉到的錢幣面值為\(w\),數量為\(num\)
觀察發現,\(f_i=f_+f_+\ldots+f_\),其中\(k\leq num\)
考慮設\(s_i\)表示\(f_+f_+f_+\ldots+f_\),其中\(i\geq kw,i< (k+1)w\)
於是有\(f_i=s_i-[i\geq (num+1)w]s_\)
對於每個物品都這麼做,複雜度為\(nx\)
法二
這個方法好像是套路,對於多重揹包計數就可以這樣做
類似于容斥
仍然是設列舉到的錢幣面值為\(w\),數量為\(num\)
先不管上界直接做完全揹包
之後將算多了的減去
即\(f_i-=f_\)
實際上,這兩種方法是換湯不換藥的
\(\mathcal\)
/*******************************
author:morning_glory
lang:c++
created time:2023年10月21日 星期一 20時18分58秒
*******************************/
#include #include using namespace std;
const int maxn = 20004;
const int mod = 1000000007;
//}cin;
//}}}
int n,c,ans;
int fa[maxn],fb[maxn],w[maxn],ha[maxn],hb[maxn],s[maxn];
// if (x=(num+1)*v) f[i]=m(f[i]-s[i-(num+1)*v]); }}
//}}}
int main()
如有**講得不是很明白或是有錯誤,歡迎指正如您喜歡的話不妨點個贊收藏一下吧
poj 1787 多重揹包(硬幣付款不找錢)
題意 分硬幣,有1,5,10,25四種硬幣,給定每種硬幣的數量,給定要組合成的價值,問剛好達到價值時用的硬幣最多的情況。思路 dp j 表示 j 塊錢最多由多少塊硬幣組成,used j 表示 j 塊錢時,已經放了多少同種類的硬幣。實際上path用一維陣列即可,使得 path j 表示 上一次最多有多...
python多重揹包 多重揹包
多重揹包問題 有 n 種物品和乙個容量是 v 的揹包。第 i 種物品最多有 si 件,每件體積是 vi,價值是 wi。求解將哪些物品裝入揹包,可使物品體積總和不超過揹包容量,且價值總和最大。輸出最大價值。資料範圍 0 n v 100 0 vi wi si 100 樸素版多重揹包問題 樸素版完全揹包問...
多維多重揹包問題 01揹包,完全揹包,多重揹包
csdn 專業it技術社群 登入 blog.csdn.net有n件物品和乙個容量為v的揹包。第i件物品的費用是w i 價值是v i 求將哪些物品裝入揹包可使價值總和最大。1.1空間優化 這要求在每次主迴圈中我們以 v v 0 的遞減順序計算 f v 這樣才能保證計算 f v 時 f v ci 儲存的...