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背包,第k优解问题)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2639 解题报告:关于第k优解得问题,前面看到过第k最小生成树,不过很伤心,一直没看懂其思想 ...
  • ren_hui
  • ren_hui
  • 2013年07月31日 09:49
  • 551

HDU-2639-Bone Collector II(01背包的第k优解)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2639 Bone Collector II Problem Description The ti...

Bone Collector II (HDU_2639) 01背包 + 第K优解

Bone Collector II Time Limit: 5000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Other...

hdu2639Bone Collector II (01背包,求第k优解)

Problem Description The title of this problem is familiar,isn't it?yeah,if you had took part in the ...

hdu 2639 Bone Collector II 01背包第K优解

点击打开链接链接 Bone Collector II Time Limit: 5000/2000 MS (Java/Others)    Memory Limit: 32768/32768...

hdu-2639-01背包变形之求第k优解-Bone Collector II

Bone Collector II Problem Description The title of this problem is familiar,isn't it?yeah,if you...

Hdu 2639 Bone Collector II (01背包第k优解)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2639 思路:01背包第k优解。 #include #include int f[1005][...

HDU 2639 Bone Collector II(01背包、第k优解)

题目链接: HDU 2639 Bone Collector II 题意: 有n件物品,背包总容量V,每件物品的体积和价值分别为volume[i]和val[i],求背包可以容纳的第K大的总价值? ...
  • Ramay7
  • Ramay7
  • 2016年04月13日 15:52
  • 182

HDU 2639 Bone Collector II (01背包第k优解 好题)

HDU 2639 Bone Collector II (01背包第k优解 好题)

HDU2639:Bone Collector II(01背包第k优解)

传送门: http://acm.hdu.edu.cn/showproblem.php?pid=2639 01背包的基础上改过来的,题意是找当前背包容量下第k大的价值。 基本思想就是记...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Hdu 2639 Bone Collector II(第K大最优解01背包)
举报原因:
原因补充:

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