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;
}