本文出自:http://blog.csdn.net/svitter
原题:http://acm.hrbust.edu.cn/index.php?m=ProblemSet&a=showProblem&problem_id=1053
题意:完全背包不解释。。直接贴代码。。
#include <iostream> #include <stdio.h> #include <string.h> using namespace std; #define max(a, b) a > b? a : b struct Unit { int val; int cost; }; Unit unit[100000]; int f[100000]; void ace() { //work point int t; int i, j, k; //num int g, u, n; // n means size cin >> t; while(t--) { memset(f, 0 ,sizeof(f)); scanf("%d%d", &g, &u); for(i = 0; i < u; i++) { scanf("%d%d", &unit[i].val, &unit[i].cost); } for(i = 0; i < u; i++){ n = g - unit[i].cost; for(j = 0; j <= n; j++){ f[j + unit[i].cost] = max(f[j +unit[i].cost], f[j] + unit[i].val); } } printf("%d ", f[g]); } } int main() { ace(); return 0; }
作者:svitter 发表于2014-5-2 18:15:37 原文链接
阅读:198 评论:0 查看评论