01背包 第k优解
2016-10-07 20:13
330 查看
求次优解、第K 优解
#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;
}
相关文章推荐
- hdu 2636 Bone Collector II 01背包(第k优解问题)
- hdu2639——Bone Collector II——————【01背包、第k优解】
- hdu2639 bone collector II 01背包第k优解 TWT Tokyo Olympic 1COMBO-1
- HDU 2639 Bone Collector II 【01背包的第k优解】
- hdu 2639 Bone Collector II (01背包,第k优解问题)
- hdu 2639 Bone Collector II(01背包)(第k优解)
- Bone Collector II HDU - 2639 01背包,第k优解
- hdu 2639 Bone Collector II(求第k优解 01背包)
- hdu 01背包 2639Bone Collector II 01背包的第K优解
- dp之01背包hdu2639(第k优解)
- Hduoj2639【01背包+第k优解】
- 杭电 2639 Bone Collector II【01背包第k优解】
- 关于01背包求第k优解
- HDU2639_Bone Collector II 01背包求第K优解
- HDOJ2639(01背包第k最优解模板题)
- hdu 2639 Bone Collector II(01背包 第K大价值)
- 01背包变种 第k解问题 hdu 2639
- hdu2639-01背包(第k大背包问题)
- 2639骨头问题2(01背包的第k大值)
- Hdu 2639 Bone Collector II(第K大最优解01背包)