//转化成01背包问题
#include <stdio.h>
#include <iostream>
#include <memory.h>
using namespace std;
int dp[30001];
int main()
{
int N,m;
while(cin >> N)//相当于背包中能承载的重量
{
cin >> m;//相当于物品个数
int w[26],v[26];//w相当于背包中每个物品的重量,v为价值
for(int i = 0;i < m;i++)
{
cin >> w[i] >> v[i];
}
memset(dp,0,sizeof(dp));
dp[0] = 1;
for(int i = 0;i < m;i++)
for(int j = N;j >= w[i];j--)
dp[j] = max(dp[j],dp[j - w[i]] + w[i] * v[i]);
cout << dp[N] << endl;
}
return 0;
}
sicily 1342. 开心的金明
最新推荐文章于 2017-04-16 16:08:13 发布