香穗子正准备参加一个晚会!现在她准备好好打扮一下,她准备戴上耳环,手镯,项链..等等一些装饰品,这里要说明的是,香穗子不是花瓶….
香穗子最多能承受W的重量,每个装饰品也有各自的重量和美观值
现在香穗子要怎么打扮,美观值的和最大
输入:
第一行两个数,w,n
接下来n行,每行两个数,表示物品的信息,第一个数是物品的重量,第二个数是物品的美观值
输出:
表示香穗子最多能得到的最大美观值和
Sample Input
10 2
7 8
8 7
Sample Output
8
数据范围:
n<=100,w<=10000
答案保正小于Maxlongint
01背包
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
using namespace std;
int W, N;
int F[10005];
struct rec
{
int cost;
int val;
}Project[105];
void init_file()
{
freopen("2.in", "r", stdin);
freopen("2.out", "w", stdout);
}
void read_data()
{
scanf("%d%d", &W, &N);
for(int i = 0; i < N; i++)
{
int cost;
int val;
scanf("%d%d", &cost, &val);
Project[i].cost = cost;
Project[i].val = val;
}
}
void work()
{
for(int i = 0; i < N; i++)
{
for(int cost = W; cost >= Project[i].cost; cost--)
{
F[cost] = max(F[cost], F[cost - Project[i].cost] + Project[i].val);
}
}
printf("%d\n", F[W]);
}
int main()
{
init_file();
read_data();
work();
return 0;
}