zzu 10467: 控制食欲 --01背包

10467: 控制食欲

Time Limit: 1 Sec   Memory Limit: 128 MB
Submit: 53   Solved: 15
[ Submit][ Status][ Web Board]

Description

MM像她的诸多姊妹一样,爱吃零食但又爱美,为了控制体重我们将她置于一个及其严格的节食计划之中。她每天食物不能超过H 克(5 <= H <= 45,000)。 过节啦,MM网购了许多零食,数数,居然有N种(<=500). 她自然想尽量多吃。MM算算每种零食的重量S_i (1 <= S_i <= H), , 计划自己在不超过节食的限制的前提下可以吃掉多少

Input

一行: 两个由空格隔开的整数: H 和 N 第2到第N+1行: 第i+1行是一个单独的整数,表示第 i 种零食重量S_i。

Output

一个单独的整数。表示MM最多可以吃的重量。

Sample Input

56 4
15
19
20
21

Sample Output

56

01背包,可以把H看做背包的容量,每一种零食的重量,也相当于重量。

<pre name="code" class="cpp">
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
int main(){
	int h,n,a[505],i,j,sum,b[45005];
	while(~scanf("%d %d",&h,&n)){
		for(i=1;i<=n;i++)
			scanf("%d",&a[i]);
		memset(b,0,sizeof(b));
		for(i=1;i<=n;i++){
			for(j=h;j>=a[i];j--){
				b[j]=max(b[j],b[j-a[i]]+a[i]);
				//printf("%d\n",b[j]);
			}
		}
		printf("%d\n",b[h]);
	}
	return 0;
}


 
 

你可能感兴趣的:(zzu)