Hdu 2639 Bone Collector II(第K大最优解01背包)

原创 2015年11月18日 15:02:05

这是很基本的01背包的题目,在背包九讲里面有讲过.

题目大意:背景材料没看懂,不过题目意思是求出第K大的不重复的最优解.

注意点:题目是先给出每件东西的价值,然后再给出每件东西的体积

( (T T) 下意识以为先给体积再给价值的..)


以下是A了的代码:

<span style="font-size: 14px;"><span style="font-family:Microsoft YaHei;">#include <cstdio>
#include <queue>
#include <cstring>
#include <iostream>
#include <cstdlib>
#include <algorithm>
#include <vector>
#include <map>
#include <set>
#include <ctime>
#include <cmath>

using namespace std;
const int K = 30 + 3;
const int N = 100*1000 + 10;
int dp[N][K];
int size[110],val[110];
int cmp(int a,int b){
	return a>b;
}

int main()
{
	//freopen("/home/user/桌面/in","r",stdin);
	int cas;
	scanf("%d",&cas);
	while(cas--){
		int n,v,k,maxv=0;
		scanf("%d%d%d",&n,&v,&k);
		for(int i=1;i<=n;++i) scanf("%d",&val[i]);
		for(int i=1;i<=n;++i) scanf("%d",&size[i] );
		memset(dp,0,sizeof(dp));

		for(int i=1;i<=n;++i){
			for(int j=v; j>=size[i]; --j){
				int te[2*K];
				memset(te,0,sizeof(te));
				int tk=1;
				for(int t=1;t<=k;++t) te[tk++] = dp[j][t];
				for(int t=1;t<=k;++t) te[tk++] = dp[j - size[i]][t] + val[i];

				sort(te + 1,te + tk,cmp);
				tk = unique(te + 1,te + tk) - te - 1;

				int kk;
				for(kk=1;kk<=k&&kk<=tk;++kk) dp[j][kk] = te[kk];
			}
		}

		printf("%d\n",dp[v][k]);
	}
	//printf("time=%.3lf",(double)clock()/CLOCKS_PER_SEC);
	return 0;
}</span></span>


HDU--2639--Bone Collector II--01背包

Bone Collector IITime Limit: 5000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)...
  • hncu1206401liuhao
  • hncu1206401liuhao
  • 2014年12月02日 01:19
  • 662

HDU 2639 Bone Collector II

题目分析 这道题要求第K大背包,很显然数组增加一维K,01背包的状态转移式 为dp[i][j] = max(dp[i-1][j], dp[i-1][j-vol[i]] + val[i]); ...
  • chen_ze_hua
  • chen_ze_hua
  • 2016年06月16日 10:10
  • 188

hdu2639 Bone Collector II

Problem Description The title of this problem is familiar,isn't it?yeah,if you had took part in t...
  • Kirito_Acmer
  • Kirito_Acmer
  • 2015年06月20日 19:37
  • 517

hdu2639Bone Collector II

第k优解
  • u014303647
  • u014303647
  • 2014年05月16日 11:02
  • 844

HDU-2639-Bone Collector II

这个题是HDU-2602-Bone Collector升级版,改为求第k大的值 思路: 将背包的维数增加一维,存的时候注意去重~ 代码: #include #include #include ...
  • z309241990
  • z309241990
  • 2013年07月06日 23:05
  • 970

hdu2639 Bone Collector II 01背包边形,第k大价值

链接:点我 现在01的基础上多加一维,dp[v][k],表示在v空间下第k大的价值。。。 更新的时候有两个数组A、B,A记录选择第i个物品的从大到小排列,B记录不选择的从大到小排列,然后合并AB,...
  • liuqiyao_01
  • liuqiyao_01
  • 2013年04月02日 15:56
  • 2961

【HDU-2639】Bone Collector II(背包)

DescriptionThe title of this problem is familiar,isn’t it?yeah,if you had took part in the “Rookie C...
  • iceiceicpc
  • iceiceicpc
  • 2016年03月10日 19:58
  • 195

hdu2639(01背包变形-第k大背包)

01背包变形 求第k大背包 多开一维[k],两种情况分别放在A[],B[]两个数组里,将AB合并(即从小到大排序 取第k大) 开一个大小为K的数组f[i][v][1..K]。其中f[i][v][k]...
  • Jeromiewn
  • Jeromiewn
  • 2016年08月31日 17:01
  • 450

hdu 2639 Bone Collector II 第k大01背包

题目链接 题意:求第k大的01背包。 每次比较时保存前k大的情况。 #include #include #include #include #define N 1100 using name...
  • zchahaha
  • zchahaha
  • 2016年05月03日 19:57
  • 482

HDU 2639 Bone Collector II(01背包 求第k大)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2639 题意: T组数据 n个骨头,背包容量v,k(输出第k大) 每个骨头的价值 每个骨头的体...
  • YHYYXT
  • YHYYXT
  • 2015年07月18日 23:46
  • 388
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Hdu 2639 Bone Collector II(第K大最优解01背包)
举报原因:
原因补充:

(最多只允许输入30个字)