有乙隻特別貪吃的大嘴,她很喜歡吃一種小蛋糕,而每乙個小蛋糕有乙個美味度,而大嘴是很傲嬌的,一定要吃美味度和剛好為m的小蛋糕,而且大嘴還特別懶,她希望通過吃數量最少的小蛋糕達到這個目的.所以她希望你能設計乙個程式幫她決定要吃哪些小蛋糕.
先輸入一行包含2個整數m、n,表示大嘴需要吃美味度和為m的小蛋糕,而小蛋糕一共有n種,下面輸入n行,每行2個整數,第乙個表示該種小蛋糕的美味度,第二個表示蛋糕店中該種小蛋糕的總數
輸出一行包含乙個整數表示大嘴最少需要吃的小蛋糕數量,若大嘴無法通過吃小蛋糕達到m的美味度和,則輸出"><「.
思路:很容易想到這是乙個簡單的多重揹包問題,只要將每個蛋糕被吃的數量當作狀態計算的變數就行了。題目要求的屬性是最小值,所以理應將狀態 f 初始化為inf。
**如下:
#include
#define ios ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
using
namespace std;
typedef
long
long ll;
const
int n =55;
const
int m =
2e4+10;
const
int inf =
0x3f3f3f3f
;int f[m]
;int v[n]
, w[n]
;int n, m;
intmain()
if(s >0)
} n = cnt;
f[0]
=0;//注意這裡要將0點初始化為0,否則狀態轉移會出錯。
for(
int i =
1; i <= n; i++
)for
(int j = m; j >= v[i]
; j--
) f[j]
=min
(f[j]
, f[j - v[i]
]+ w[i]);
//如果m點沒有被改變,即無法正好湊到m,就輸出"><"
if(f[m]
== inf) cout <<
"><"
<< endl;
else cout << f[m]
<< endl;
return0;
}
多維多重揹包問題 多重揹包問題
悼念512汶川大 遇難同胞 珍惜現在,感恩生活 急!災區的食物依然短缺!為了挽救災區同胞的生命,心繫災區同胞的你準備自己採購一些糧食支援災區,現在假設你一共有資金n元,而市場有m種大公尺,每種大公尺都是袋裝產品,其 不等,並且只能整袋購買。請問 你用有限的資金最多能採購多少公斤糧食呢?後記 人生是乙...
揹包問題 多重揹包
有n種物品和乙個容量為w的揹包。第i種物品最多有n i 件可用,每件重量是w i 價值是v i 求解將哪些物品裝入揹包可使這些物品的重量總和不超過揹包容量,且價值總和最大。1.使用三重迴圈進行遞推 狀態轉移式為 dp i j max 關鍵 如下 void solve printf d n dp n ...
演算法提高 貪吃的大嘴
演算法提高 貪吃的大嘴 時間限制 1.0s 記憶體限制 256.0mb 提交此題 問題描述 有乙隻特別貪吃的大嘴,她很喜歡吃一種小蛋糕,而每乙個小蛋糕有乙個美味度,而大嘴是很傲嬌的,一定要吃美味度和剛好為m的小蛋糕,而且大嘴還特別懶,她希望通過吃數量最少的小蛋糕達到這個目的.所以她希望你能設計乙個程...