HDU2693 骨头收藏家II(第k大背包)
来源:互联网 发布:淘宝店铺装修页头没了 编辑:程序博客网 时间:2024/05/01 08:59
【题目链接】
http://acm.hdu.edu.cn/showproblem.php?pid=2639
题目意思
给你n种骨头,每种骨头占用对应的空间,却有相应的价值。现在你有v的背包,问第k大的价值是多少(相同价值只算一次)
解题思路
第k大背包题,处理下值相同情况就可以了
代码部分
#include <bits/stdc++.h>using namespace std;#define LL long longconst int maxn=105;const int INF=0x3f3f3f;LL dp[35][1005],p1[35],p2[35];int w[maxn],v[maxn];int main(){ int t; scanf("%d",&t); while(t--) { int n,m,k; scanf("%d %d %d",&n,&m,&k); /*for (int i=1;i<=k;i++) for (int j=0;j<=m;j++) if (i==1) dp[i][j]=0; else dp[i][j]=-INF;*/ memset(dp,0,sizeof(dp)); for (int i=1; i<=n; i++) scanf("%d",&w[i]); for (int i=1; i<=n; i++) scanf("%d",&v[i]); for (int i=1; i<=n; i++) { for (int j=m; j>=v[i]; j--) { for (int z=1; z<=k; z++) { p1[z]=dp[z][j]; p2[z]=dp[z][j-v[i]]+w[i]; } int h1=1,h2=1,h=1; while(h<=k&&(h1<=k||h2<=k)) { if (p1[h1]>p2[h2]&&h1<=k||h2>k) ///必须判断h1和h2 { if (p1[h1]!=dp[h-1][j]) ///如果不等于前个价值 dp[h++][j]=p1[h1]; h1++; } else { if (p2[h2]!=dp[h-1][j]) dp[h++][j]=p2[h2]; h2++; } } } } printf("%d\n",dp[k][m]); } return 0;}
阅读全文
0 0
- HDU2693 骨头收藏家II(第k大背包)
- 背包问题之 “骨头收藏家”
- hdu 2639 Bone Collector II(第K大背包)
- hdu2639Bone Collector II(第K大背包)
- 2639骨头问题2(01背包的第k大值)
- HDU2639 - Bone Collector II(第k大01背包)
- HDU - 2639 Bone Collector II(第K大01背包)
- hdu 2639 Bone Collector II 第k大01背包
- hdu-2639-Bone Collector II【第K大背包】
- HDOJ 2639 Bone Collector II (背包求第k大)
- HDOJ 2639 Bone Collector II(01||第K大背包)
- hdu 2639Bone Collector II(01背包求第k大)
- HDU 2639 Bone Collector II 收集骨头II+第k最优值
- hdu2639-01背包(第k大背包问题)
- hdu2639(01背包变形-第k大背包)
- 01背包第k大
- HDU 2639 Bone Collector II (背包 第K优解)
- hdu2639 Bone Collector II (01背包第k大解)
- ionic购物车
- ValueError: too many values to unpack
- 【Java学习4.5】数组类型
- 数据结构实验之图论一:基于邻接矩阵的广度优先搜索遍历
- 重构培训课程后的一些感想
- HDU2693 骨头收藏家II(第k大背包)
- error: command 'gcc' failed with exit status 1
- Android一级购物车简单实现
- AngularJS购物车
- boost interprocess 进程通信
- Java(31):数据结构排序---对接口 Comparable<T> 与 接口 Comparator<T> 的区别理解
- golang log模块之log4go使用介绍
- 网络问题检查
- 海量数据处理