395. [USACO Oct09] Bessie的體重問題
★ 輸入檔案:diet.in 輸出檔案:diet.out 簡單對比
時間限制:1 s 記憶體限制:128 MB
Bessie像她的諸多姊妹一樣,因為從Farmer John的草地吃了太多美味的草而長出了太多的
贅肉。所以FJ將她置於一個及其嚴格的節食計畫之中。她每天不能吃多過H (5 <= H <=
45,000)公斤的乾草。
Bessie只能吃一整捆乾草;當她開始吃一捆乾草的之後就再也停不下來了。她有一個完整的
N (1 <= N <= 500)捆可以給她當作晚餐的乾草的清單。她自然想要盡量吃到更多的乾草。
很自然地,每捆乾草只能被吃一次(即使在列表中相同的重量可能出現2次,但是這表示的是
兩捆乾草,其中每捆乾草最多隻能被吃掉一次)。
給定一個列表表示每捆乾草的重量S_i (1 <= S_i <= H), 求Bessie不超過節食的限制的
範例輸入 (檔案 diet.in):
56 4
15
19
20
21
輸入細節:
有四捆草,重量分別是15, 19, 20和21。Bessie在56公斤的限制範圍內想要吃多少就可
以吃多少。
輸出格式:
* 第一行: 一個單獨的整數表示Bessie在限制範圍內最多可以吃多少公斤的乾草。
範例輸出 (檔案 diet.out):
56
輸出細節:
Bessie可以吃3捆乾草(重量分別為15, 20, 21)。恰好達到她的56公斤的限制。
01背包。
#include<cstdio>using namespace std;int h,n,a;int dp[50000];int main(){ freopen("diet.in","r",stdin); freopen("diet.out","w",stdout); scanf("%d%d",&h,&n); dp[0]=1; for(int i=1;i<=n;i++) { scanf("%d",&a); for(int j=h;j>=a;j--){ if(dp[j-a]){ dp[j]=1; } } } for(int i=h;i>=0;i--){ if(dp[i]==1){ printf("%d\n",i); break; } } return 0;}