FOJ 2214 Knapsack problem 第六届福建省大学生程序设计竞赛 C 01背包DP变种
来源:互联网 发布:淘宝哪里申请换货 编辑:程序博客网 时间:2024/04/29 08:15
Knapsack problem
Accept: 202 Submit: 817
Time Limit: 3000 mSec Memory Limit : 32768 KB
Problem Description
Given a set of n items, each with a weight w[i] and a value v[i], determine a way to choose the items into a knapsack so that the total weight is less than or equal to a given limit B and the total value is as large as possible. Find the maximum total value. (Note that each item can be only chosen once).
Input
The first line contains the integer T indicating to the number of test cases.
For each test case, the first line contains the integers n and B.
Following n lines provide the information of each item.
The i-th line contains the weight w[i] and the value v[i] of the i-th item respectively.
1 <= number of test cases <= 100
1 <= n <= 500
1 <= B, w[i] <= 1000000000
1 <= v[1]+v[2]+...+v[n] <= 5000
All the inputs are integers.
Output
For each test case, output the maximum value.
Sample Input
1
5 15
12 4
2 2
1 1
4 10
1 2
Sample Output
15
Source
第六届福建省大学生程序设计竞赛-重现赛(感谢承办方华侨大学)
题意:01背包,但是背包重量非常大。
思路:不能用传统的公式,题目限制价值总和小于5000,所以可以用价值来dp。dp[i]代表价值总和不大于i的重量的最小值
dp[j] = min(dp[j],dp[j-val[i]]+w[i]);
#include <iostream>#include <stdio.h>#include <math.h>#include <stdlib.h>#include <string>#include <string.h>#include <algorithm>#include <vector>#include <queue>#include <iomanip>#include <time.h>#include <set>#include <map>#include <stack>using namespace std;typedef long long LL;const int INF=0x7fffffff;const int MAX_N=10000;const long long BIG=0x3fffffffffffffff;int val[5005];long long w[509];long long dp[5009];//价值不大于i的重量的最小值int T,n,b;int main(){ cin>>T; while(T--){ cin>>n>>b; for(int i=0;i<n;i++){ scanf("%I64d%d",&w[i],&val[i]); } fill(dp,dp+5001,BIG); dp[0]=0; for(int i = 0;i<n;i++){ for(int j = 5000;j>=val[i];j--){ dp[j] = min(dp[j],dp[j-val[i]]+w[i]); } } long long ans=0; for(int i=5000;i>=0;i--){ // cout<<dp[i]<<endl; if(dp[i]<=b){ ans=i; break; } } cout<<ans<<endl; } return 0;}/*15 1512 42 21 14 101 2*/
- FOJ 2214 Knapsack problem 第六届福建省大学生程序设计竞赛 C 01背包DP变种
- 第六届福建省大学生程序设计竞赛 Problem C Knapsack problem【背包问题】
- 第六届福建省大学生程序设计竞赛-重现赛,Problem C Knapsack problem【大背包】
- FZU Problem 2214 Knapsack problem(01背包,超大背包)——第六届福建省大学生程序设计竞赛-重现赛
- FOJ 2213 Common Tangents 【第六届福建省大学生程序设计竞赛】
- 第六届福建省大学生程序设计竞赛 Problem J RunningMan【数学】
- 第六届福建省大学生程序设计竞赛——G Simple String Problem(状态压缩dp)
- FOJ 2216 The Longest Straight 第六届福建省大学生程序设计竞赛 E 尺取法乱搞
- 第六届福建省大学生程序设计竞赛
- Knapsack problem (FZU_2214,福建省第六届ACM-problemC) 01背包+初始化问题+渐缩问题
- Knapsack problem (FZU_2214,福建省第六届ACM-problemC) 01背包+初始化问题+渐缩问题
- 第六届福建省大学生程序设计竞赛 Problem A Super Mobile Charger【模拟】
- 第六届福建省大学生程序设计竞赛 Problem B Common Tangents【几何】
- 第六届福建省大学生程序设计竞赛-重现赛,Problem B Common Tangents【数学几何】
- 第六届福建省大学生程序设计竞赛-重现赛,Problem J RunningMan
- 第六届福建省大学生程序设计竞赛 Problem E The Longest Straight
- FZU Problem 2221 RunningMan(思维考查)——第六届福建省大学生程序设计竞赛-重现赛
- FOJ Problem 2283 Tic-Tac-Toe(暴力枚举)——第八届福建省大学生程序设计竞赛-重现赛
- Python实现MapReduce
- 支付宝钱包系统架构内部剖析(架构图)
- iOS开发之xib 加载xib视图需要用到的方法
- Activity重新创建之recreate
- BZOJ 3676 UOJ 103 APIO 2014 后缀自动机 Manacher
- FOJ 2214 Knapsack problem 第六届福建省大学生程序设计竞赛 C 01背包DP变种
- SQLite数据库笔记
- dstat默认输出说明
- Eclipse使用入门教程
- 什么是库?(linux平台下的理解)
- 正则表达式在iOS中的运用
- 修改JAVA_HOME无效,java版本保持不变的问题解决
- 简单的Timer
- 百度地图mapview出来只有方格子没地图Authentication Error errorcode: 230 uid: -1 appid -1 msg: APP Scode码校验失败