HDU2639Bone Collector II(01背包变形)
01背包,求第k大。
以前看k短路的时候看过代码以为懂了 = =结果还是跑去看了别人的代码才会。果然要自己写一遍才行啊 0.0难得1A。。
每次把可能的2k种求出来,求前k个。注意要不一样的k个数。。
/**************************************************************
Problem : 2639 ( Bone Collector II ) Judge Status : Accepted
RunId : 15212165 Language : G++ Author : G_lory
Code Render Status : Rendered By HDOJ G++ Code Render Version 0.01 Beta
***************************************************************/
#include <iostream>
#include <cstdio>
#include <cstring> using namespace std; //N <= 100 , V <= 1000 , K <= 30 const int MAXN = 105;
const int MAXV = 1005;
const int MAXK = 35; int val[MAXN];
int vol[MAXN]; int dp[MAXV][MAXK]; int a[MAXK], b[MAXK]; int main()
{
int n, v, k;
int t;
cin >> t;
while (t--)
{
memset(dp, 0, sizeof dp); cin >> n >> v >> k;
for (int i = 0; i < n; ++i)
cin >> val[i];
for (int i = 0; i < n; ++i)
cin >> vol[i]; for (int i = 0; i < n; ++i)
{
for (int j = v; j >= vol[i]; --j)
{
for (int q = 0; q < k; ++q)
{
a[q] = dp[j][q];
b[q] = dp[j - vol[i]][q] + val[i];
} int ic = 0, jc = 0;
int ck = 0; while (ic < k && jc < k && ck < k)
{
if (a[ic] < b[jc])
{
if (ck == 0 || b[jc] < dp[j][ck - 1])
dp[j][ck++] = b[jc];
jc++;
}
else
{
if (ck == 0 || a[ic] < dp[j][ck - 1])
dp[j][ck++] = a[ic];
ic++;
}
} while (ic < k && ck < k)
{
if (ck == 0 || a[ic] < dp[j][ck - 1])
dp[j][ck++] = a[ic];
ic++;
} while (jc < k && ck < k)
{
if (ck == 0 || b[jc] < dp[j][ck - 1])
dp[j][ck++] = b[jc];
jc++;
}
}
} cout << dp[v][k - 1] << endl;
}
return 0;
}
HDU2639Bone Collector II(01背包变形)的更多相关文章
- HDU 2639 Bone Collector II(01背包变形【第K大最优解】)
		Bone Collector II Time Limit: 5000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others ... 
- HDU2639Bone Collector II[01背包第k优值]
		Bone Collector II Time Limit: 5000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others ... 
- hdu–2369 Bone Collector II(01背包变形题)
		题意:求解01背包价值的第K优解. 分析: 基本思想是将每个状态都表示成有序队列,将状态转移方程中的max/min转化成有序队列的合并. 首先看01背包求最优解的状态转移方程:\[dp\left[ j ... 
- HDU 2639 Bone Collector II (01背包,第k解)
		题意: 数据是常规的01背包,但是求的不是最大容量限制下的最佳解,而是第k佳解. 思路: 有两种解法: 1)网上普遍用的O(V*K*N). 2)先用常规01背包的方法求出背包容量限制下能装的最大价值m ... 
- HDU 2639 Bone Collector II(01背包变型)
		此题就是在01背包问题的基础上求所能获得的第K大的价值. 详细做法是加一维去推当前背包容量第0到K个价值,而这些价值则是由dp[j-w[ i ] ][0到k]和dp[ j ][0到k]得到的,事实上就 ... 
- HDU - 2639 Bone Collector II (01背包第k大解)
		分析 \(dp[i][j][k]\)为枚举到前i个物品,容量为j的第k大解.则每一次状态转移都要对所有解进行排序选取前第k大的解.用两个数组\(vz1[],vz2[]\)分别记录所有的选择情况,并选择 ... 
- FZU 2214 Knapsack problem 01背包变形
		题目链接:Knapsack problem 大意:给出T组测试数据,每组给出n个物品和最大容量w.然后依次给出n个物品的价值和体积. 问,最多能盛的物品价值和是多少? 思路:01背包变形,因为w太大, ... 
- codeforce  Gym 101102A Coins (01背包变形)
		01背包变形,注意dp过程的时候就需要取膜,否则会出错. 代码如下: #include<iostream> #include<cstdio> #include<cstri ... 
- HDOJ(HDU).2602 Bone Collector (DP 01背包)
		HDOJ(HDU).2602 Bone Collector (DP 01背包) 题意分析 01背包的裸题 #include <iostream> #include <cstdio&g ... 
- 【01背包变形】Robberies HDU 2955
		http://acm.hdu.edu.cn/showproblem.php?pid=2955 [题意] 有一个强盗要去几个银行偷盗,他既想多抢点钱,又想尽量不被抓到.已知各个银行 的金钱数和被抓的概率 ... 
随机推荐
- Java 中正确使用 hashCode 和 equals 方法
			在这篇文章中,我将告诉大家我对hashCode和equals方法的理解.我将讨论他们的默认实现,以及如何正确的重写他们.我也将使用Apache Commons提供的工具包做一个实现. 目录: hash ... 
- MacBookPro 蓝牙重置
			我的MBP经常休眠唤醒后蓝牙死机,怎么办? 大部分情况下,关机重启就可以了,但是如果还不行的话,试一下如下方法,也能解决问题: 重置一下电源管理和总线给你个方法 您的电脑首先是在关机的状态重置电源管理 ... 
- 关于hibernate的实体类中有集合类型转化成JSON的工具类 - 怀念今天的专栏 - 博客频道
			Json 来源:http://blog.csdn.net/zczzsq/article/details/18697045#1536434-hi-1-4387-42d97150898b1af15ddaa ... 
- Ubutn14.04下caffeine工具不显示在工具栏中的问题
			安装过程请参考Ubuntu 14.04下安装Caffeine 2.6.2 阻止显示器进入睡眠状态 至于为什么不显示在任务栏,这不是程序的bug,你可以平ps -e看一下,任务已经在运行. 其实这是新版 ... 
- android usb Host模式下与usb Hid 设备的通信
			做android 与USB HID设备的通信有段时间了,总结一下遇到的问题和解决方法: 1,第一次遇到的问题:android 版本低不支持usb hid, 被要求做相关项目的时候,就从mUsbMana ... 
- powerdesigner简单使用
			---- 1) --- 新建流程图:新建模型,选择activity的那个就可以了. ---- 
- error: 'LOGE' was not declared in this scope
			移植了下HAL,发现编译出现如下错误 error: 'LOGE' was not declared in this scope 比较了一下android4.1的 system/core/include ... 
- Android开发UI之去掉title bar
			去掉屏幕上的title bar有3个方法: 1.java代码实现: @Override publicvoid onCreate(Bundle savedInstanceState) { super.o ... 
- 我的第一个Hibernate程序
			1.建表建序列(所用数据库为Oracle,数据库名为XE,创建用户hibernate,密码为123456) conn system/manager; ; grant connect to hibern ... 
- Asp.net性能优化技巧
			[摘 要] 我只是提供我几个我认为有助于提高写高性能的asp.net应用程序的技巧,本文提到的提高asp.net性能的技巧只是一个起步,更多的信息请参考<Improving ASP.NET Pe ... 
