hdu2639 Bone Collector II
来源:互联网 发布:闪传windows版 编辑:程序博客网 时间:2024/06/07 17:23
Description
Here is the link: http://acm.hdu.edu.cn/showproblem.php?pid=2602
Today we are not desiring the maximum value of bones,but the K-th maximum value of the bones.NOTICE that,we considerate two ways that get the same value of bones are the same.That means,it will be a strictly decreasing sequence from the 1st maximum , 2nd maximum .. to the K-th maximum.
If the total number of different values is less than K,just ouput 0.
Input
Followed by T cases , each case three lines , the first line contain two integer N , V, K(N <= 100 , V <= 1000 , K <= 30)representing the number of bones and the volume of his bag and the K we need. And the second line contain N integers representing the value of each bone. The third line contain N integers representing the volume of each bone.
Output
Sample Input
35 10 21 2 3 4 55 4 3 2 15 10 121 2 3 4 55 4 3 2 15 10 161 2 3 4 55 4 3 2 1
Sample Output
1220
Source
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
struct Node
{
int price;
int val;
} node[1005];
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int n,v,k,i,dp[1005][31] = {0},a[31],b[31];
scanf("%d%d%d",&n,&v,&k);
for(i = 0; i<n; i++)
scanf("%d",&node[i].price);
for(i = 0; i<n; i++)
scanf("%d",&node[i].val);
int j;
for(i = 0; i<n; i++)
{
for(j = v; j>=node[i].val; j--)
{
int cnt = 0,d;
for(d = 1; d<=k; d++)//分别将放入第i个石头与不放第i个石头的结果存入a,b,数组之中
{
a[d] = dp[j-node[i].val][d]+node[i].price;
b[d] = dp[j][d];
}
int x,y,z;
x = y = z = 1;
a[d] = b[d] = -1;
while(z<=k && (x<=k || y<=k))//循环找出前K个的最优解
{
if(a[x] > b[y])
{
dp[j][z] = a[x];
x++;
}
else
{
dp[j][z] = b[y];
y++;
}
if(dp[j][z]!=dp[j][z-1])
z++;
}
}
}
printf("%d\n",dp[v][k]);
}
return 0;
}
- 【HDU2639】Bone Collector II
- hdu2639 Bone Collector II
- 【hdu2639】【Bone Collector II】
- hdu2639 Bone Collector II
- HDU2639-Bone Collector II
- HDU2639 Bone Collector II
- hdu2639 Bone Collector II
- HDU2639 Bone Collector II 背包K优解
- HDU2639:Bone Collector II(01背包)
- hdu2639---Bone Collector II(01背包升华)
- hdu2639 Bone Collector II(01背包)
- hdu2639 Bone Collector II 01背包第K优解
- HDU2639 - Bone Collector II(第k大01背包)
- hdu2639 Bone Collector II--01背包K优解
- 【01背包-Kth优解】HDU2639-Bone Collector II
- hdu2639 Bone Collector II (01背包第k大解)
- hdu2639 Bone Collector II(01背包第k优解)
- HDU2639:Bone Collector II(01背包第k优解)
- 南邮 OJ 2044 没有被接待的童鞋
- Kafka 与 Flume 对比
- 1321POJ
- form表单
- [C++11 并发编程] 04 - 动态选择并发线程的数量
- hdu2639 Bone Collector II
- Python环境下安装PyOpenGL
- C++中如何控制输出的格式
- 南邮 OJ 2045 罗马PK
- Hdu1166 树状数组
- uva 10562 DFS
- POJ 1274The Perfect Stall
- AC自动机
- 反作弊ObscuredInt类型的值传服务器的问题