记录编号 166551 评测结果 AAAAAAAAAA
题目名称 多人背包 最终得分 100
用户昵称 Gravatar啊吧啦吧啦吧 是否通过 通过
代码语言 C++ 运行时间 0.503 s
提交时间 2015-06-15 16:20:27 内存使用 1.16 MiB
显示代码纯文本
#include<fstream>
#include<climits>
#include<algorithm>

using namespace std;

const int MAXN = 201, MAXV = 5001, MAXK = 51;
int n, k, dp[MAXV][MAXK], wv[MAXN], ww[MAXN], v, sum = 0;
ifstream fi("bags.in");
ofstream fo("bags.out");
#define cin fi
#define cout fo

main()
{
//	ios::sync_with_stdio(0);
	cin >> k >> v >> n;
	for(int i = 1; i <= n; i ++)
		cin >> wv[i] >> ww[i];
		
	for(int i = 0; i <= n; i ++)
		fill(dp[i], dp[i] + k + 1, INT_MIN);
	dp[0][1] = 0;
	for(int i = 1; i <= n; i ++)
		for(int j = v; j >= wv[i]; j --)
		{
			int t1 = 1, t2 = 1, tot = 0, tmp[MAXK];
			while(tot != k)
			{
		        if(dp[j - wv[i]][t1] + ww[i] > dp[j][t2])
		          tmp[++ tot] = dp[j - wv[i]][t1 ++] + ww[i];
		        else
		          tmp[++ tot] = dp[j][t2 ++];
			}
			for(int l = 1; l <= k; l ++)
				dp[j][l] = tmp[l];
		}
	for(int i = 1; i <= k; i ++)
		sum += dp[v][i];
	
	cout << sum;
}