HDU 2639 Bone Collector II 收集骨头II+第k最优值

本文介绍了一道名为“BoneCollectorII”的算法题目,重点在于解决背包问题中寻找第K个最大价值的不同方案。文章详细解析了题目的含义,并通过示例帮助理解,最终给出了解决该问题的C++实现代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

HDU 2639

Bone Collector II

Time Limit:2000MS    Memory Limit:32768KB    64bit IO Format:%I64d & %I64u

Appoint description:

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.

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.

Output

One integer per line representing the K-th maximum of the total value (this number will be less than 2 31).

Sample Input

3
5 10 2
1 2 3 4 5
5 4 3 2 1
5 10 12
1 2 3 4 5
5 4 3 2 1
5 10 16
1 2 3 4 5
5 4 3 2 1

Sample Output

12
2
0
解题思路:

这题花了我不少的时间,首先题目的意思刚开始就没能很好的理解,它是要求第K最优值

最后我一一列举才知道,它的意思,就是这个背包所有可能装下的价值的中的第K个

比如第一个样例,那个背包能装下14 12 11 10 9 8 7 6 5 4 3 2 1第二个就是12咯

1,知道题意之后,发现这题还是挺不容易的,因为本来01背包只维护最优的那一个就可以了

现在我要维护第K大个,怎么存,那么只能每一个情况都存K个数字咯

2,数组就要开成dp[1005][35]每一种情况都要存前最优的k个

3,然后就是区间合并,这个不好理解,我也参考了很多资料,多花时间想一想或许就明白了


#include<bits/stdc++.h>
using namespace std;
const int maxn = 105 ;
int n,v,k ;
int volume[maxn] ;
int value[maxn] ;
int dp[1005][35];
int A[35] ;
int B[35] ;
int main(){
    int T ;
    scanf("%d",&T);
    while(T--){
        scanf("%d%d%d",&n,&v,&k);
        for(int i=1;i<=n;i++)scanf("%d",&value[i]);
        for(int i=1;i<=n;i++)scanf("%d",&volume[i]);
        memset(dp,0,sizeof(dp)) ;
        for(int i=1;i<=n;i++){
            for(int j = v;j>=volume[i];j--){
                for(int kk=1;kk<=k;kk++){
                    A[kk] = dp[j-volume[i]][kk]+value[i] ;
                    B[kk] = dp[j][kk] ;
                }
                A[k+1] = B[k+1] = -1 ;
                int a=1,b=1,c=1 ;
                while(c<=k&&(A[a]!=-1||B[b]!=-1)){
                    if(A[a]>B[b])dp[j][c]=A[a++] ;
                    else dp[j][c]=B[b++] ;
                    if(dp[j][c]!=dp[j][c-1])c++ ;
                }
            }
        }
        printf("%d\n",dp[v][k]);
    }
    return 0;
}


内容概要:《2024年中国城市低空经济发展指数报告》由36氪研究院发布,指出低空经济作为新质生产力的代表,已成为中国经济新的增长点。报告从发展环境、资金投入、创新能力、基础支撑和发展成效五个维度构建了综合指数评价体系,评估了全国重点城市的低空经济发展状况。北京和深圳在总指数中名列前茅,分别以91.26和84.53的得分领先,展现出强大的资金投入、创新能力和基础支撑。低空经济主要涉及无人机、eVTOL(电动垂直起降飞行器)和直升机等产品,广泛应用于农业、物流、交通、应急救援等领域。政策支持、市场需求和技术进步共同推动了低空经济的快速发展,预计到2026年市场规模将突破万亿元。 适用人群:对低空经济发展感兴趣的政策制定者、投资者、企业和研究人员。 使用场景及目标:①了解低空经济的定义、分类和发展驱动力;②掌握低空经济的主要应用场景和市场规模预测;③评估各城市在低空经济发展中的表现和潜力;④为政策制定、投资决策和企业发展提供参考依据。 其他说明:报告强调了政策监管、产业生态建设和区域融合错位的重要性,提出了加强法律法规建设、人才储备和基础设施建设等建议。低空经济正加速向网络化、智能化、规模化和集聚化方向发展,各地应找准自身比较优势,实现差异化发展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值