時間限制:c/c++ 1秒,其他語言2秒
空間限制:c/c++ 524288k,其他語言1048576k
64bit io format: %lld
乙個人如果在他很小的時候就自己賺過錢,他的一生都會過得非常節儉,因為他知道財富來之不易.
作為乙個勤儉節約的好孩子,牛牛決定在生活中踐行這一原則.
有一天他想去商店買一些球來玩,他發現商店裡有n個盒子,每個盒子外面有一張標籤告訴你有ai個紅球,bi個藍球,需要ci的錢購買
但是由於店主是乙個粗心的人,他告訴你每個盒子球的總量是符合標籤的說明的,但是具體的種類可能會有如下偏差,比如可能有
(ai+1 ,bi-1),(ai, bi), (ai-1, bi+1)三種可能
牛牛 想要買至少k個同顏色的球,但是他又不想浪費錢.
幫他算算最少花多少錢買盒子能夠使得至少會有k個球是同色的
第一行輸入兩個整數n,k (1≤ n≤50, 1 ≤ k ≤ 10000)第二行輸入n個整數表示a陣列
第三行輸入n個整數表示b陣列
第三行輸入n個整數表示c 陣列
1 ≤ ai,bi,ci ≤ 10000
輸出乙個整數,如果無法達成目的,輸出$-1$示例1
複製
2 10複製6 54 4
1 1
2示例2
複製
2 10複製5 54 4
1 1
-1示例3
複製
1 9105複製13
13示例4
複製
5 10複製1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
10示例5
複製
5 17複製1 2 3 4 15
1 2 3 4 5
1 2 3 4 5
9思路:我們很容易把它轉換為揹包問題,揹包的容量為球的個數,揹包的價值為所取的價值,因為要求取的某種球的個數大於等於k,我們考慮兩種極限情況:①:每個盒子裡的紅球都是ai-1個;②:每個盒子裡的藍球都是bi-1個。因為dp[i]表示放了i個球所獲得的價值,因此我們就遍歷dp[k]到dp[20000-2](為什麼是這個數呢?因為最極限的情況是一共兩個盒子,盒子裡球的個數為10000-1),取最小值。但是這樣就可以了嗎?並不是,樣例1告訴你了錯誤之處。我們考慮最普遍的情況,什麼情況某個顏色的球一定有大於等於k個呢?答案是取的取球總數大於等於2k-1時,一定有乙個顏色的球個數大於等於k。因此我們就取這個盒子裡的球總數,不管其顏色。遍歷dp[2k-1]到dp[20000-2],取最小值。最終的最小值即答案。
#includeusing namespace std;
const int maxn=2e4+100;
const int inf=0x3f3f3f3f;
int a[55],b[55],c[55],dp[maxn];
int main()
牛牛的揹包問題
牛牛準備參加學校組織的春遊,出發前牛牛準備往揹包裡裝入一些零食,牛牛的揹包容量為w。牛牛家裡一共有n袋零食,第i袋零食體積為v i 牛牛想知道在總體積不超過揹包容量的情況下,他一共有多少種零食放法 總體積為0也算一種放法 輸入描述 輸入包括兩行 第一行為兩個正整數n和w 1 n 30,1 w 2 1...
牛牛的揹包問題
牛牛準備參加學校組織的春遊,出發前牛牛準備往揹包裡裝入一些零食,牛牛的揹包容量為w。牛牛家裡一共有n袋零食,第i袋零食體積為v i 牛牛想知道在總體積不超過揹包容量的情況下,他一共有多少種零食放法 總體積為0也算一種放法 牛牛準備參加學校組織的春遊,出發前牛牛準備往揹包裡裝入一些零食,牛牛的揹包容量...
牛牛的揹包問題
牛牛準備參加學校組織的春遊,出發前牛牛準備往揹包裡裝入一些零食,牛牛的揹包容量為w。牛牛家裡一共有n袋零食,第i袋零食體積為v i 牛牛想知道在總體積不超過揹包容量的情況下,他一共有多少種零食放法 總體積為0也算一種放法 輸入包括兩行 第一行為兩個正整數n和w,表示零食的數量和揹包的容量。第二行n個...