題目:用微波爐煮雞蛋,給你每個雞蛋的重量,微波爐能放的雞蛋個數和總重有限制,
問最多能煮幾個雞蛋。
分析:dp,01背包。赤果果給的01背包。
設計狀態:f(n)為總質量為n時,最大的雞蛋個數;
狀態轉移:f(i)=max(f(i-m[j])+1,f(i-1));
說明:╮(╯▽╰)╭。
#include <cstring>
#include <cstdio>
int dp[303],m[33];
int main()
{
int T, n, P, Q;
while (~scanf("%d",&T))
for (int t = 1; t <= T; ++ t) {
scanf("%d%d%d",&n,&P,&Q);
for (int i = 0; i < n; ++ i)
scanf("%d",&m[i]);
memset(dp, 0, sizeof(dp));
for (int i = 0; i < n; ++ i)
for (int j = Q; j >= m[i]; -- j)
if (dp[j] < dp[j-m[i]]+1)
dp[j] = dp[j-m[i]]+1;
if (dp[Q] > P)
dp[Q] = P;
printf("Case %d: %d\n",t,dp[Q]);
}
return 0;
}