hdu2639(第k大值+01背包)
来源:互联网 发布:sql server中通配符 编辑:程序博客网 时间:2024/05/01 12:32
Bone Collector II
Time Limit: 5000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 1526 Accepted Submission(s): 785
Problem Description
The title of this problem is familiar,isn't it?yeah,if you had took part in the "Rookie Cup" competition,you must have seem this title.If you haven't seen it before,it doesn't matter,I will give you a link:
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.
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
The first line contain a integer T , the number of cases.
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.
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
One integer per line representing the K-th maximum of the total value (this number will be less than 231).
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
Author
teddy
Source
百万秦关终属楚
Recommend
teddy
本题与传统01背包不同,不是求最大值而是求第k大值,如果最终结果没有没有k个不同的元素,则为0
我们可以在进行01背包计算的时候多加一维,表示为当前计算出的第k大价值值,加进一物品的的第k大价值值肯定是在前一个物品前k大价值值的基础上运算得到的。
#include<iostream>#include<cstdio>#include<algorithm>using namespace std;const int MAX=100+10;struct node{int vol,val;}Bone[MAX];int dp[1000+10][30+5];int tmp[30+5];bool cmp(int a,int b){return a>b;}int main(){int cas,n,v,k,t,i,j,id,s;cin>>cas;while(cas--){scanf("%d%d%d",&n,&v,&k);for(i=1;i<=n;i++){scanf("%d",&Bone[i].val);}for(i=1;i<=n;i++){scanf("%d",&Bone[i].vol);}memset(dp,0,sizeof(dp));memset(dp,0,sizeof(dp));for(i=1;i<=n;i++){for(j=v;j>=Bone[i].vol;j--){id=0;for(t=0;t<k;t++){tmp[id++]=dp[j][t];tmp[id++]=dp[j-Bone[i].vol][t]+Bone[i].val;}sort(tmp,tmp+id,cmp);dp[j][0]=tmp[0];s=1;for(t=1;t<id&&s<k;t++)//如果第k大值不存在,则没有k个,dp[j][k]=0,符合题意{if(tmp[t]!=tmp[t-1])dp[j][s++]=tmp[t];}//printf("%d ",s);}//printf("^^\n");}//printf("\n&&&&&&&\n");printf("%d\n",dp[v][k-1]);//}return 0;}
- hdu2639(第k大值+01背包)
- hdu2639(01背包的第K大)
- 01背包第k大价值hdu2639
- hdu2639-01背包(第k大背包问题)
- hdu2639(01背包变形-第k大背包)
- hdu2639(求价值第K大的01背包)
- hdu2639----求第k大01背包模板题
- HDU2639 - Bone Collector II(第k大01背包)
- HDU2639 01背包 第K优决策
- hdu2639 01背包第k优解
- HDU2639 01背包 第K优决策
- hdu2639 Bone Collector II 01背包边形,第k大价值
- hdu2639 Bone Collector II 01背包第K优解
- HDU2639 01背包的第K最优决策
- hdu2639(01背包求第k优解)
- hdu2639 Bone Collector II (01背包第k大解)
- hdu2639 Bone Collector II(01背包第k优解)
- HDU2639:Bone Collector II(01背包第k优解)
- 一个学习AVL树很好的swf网址
- 汇编—#0窗口程序源码
- C语言父子进程--waitpid的用法
- POJ3186:Treats for the Cows(区间DP)
- timus 1029. Ministry URAL 解题报告
- hdu2639(第k大值+01背包)
- HDU3342 Legal or Not 解题报告--拓扑排序
- HDU 4432 Sum of divisors (进制模拟)
- 利用navicat创建存储过程、触发器和使用游标的简单实例
- 新手的我们怎样定位自己的工作
- Factory Method 工厂方法(创建模式) 笔记
- SSH前台代码使用action的方法
- 软件自动安装管理器 -提供源码下载
- linux批量备份服务器配置文件和目录的脚本