2014
02-12

# Bone Collector II

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:

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.

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.

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.

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

12
2
0

#include <iostream>
#include <cstdio>
using namespace std;
#define max(a,b)	((a)>(b)?(a):(b))
const int maxn = 1005;
int main()
{
int T;
scanf("%d", &T);
int dp[maxn][33], val[maxn], vol[maxn], A[33], B[33];
while (T--)
{
int n, v, k;
scanf("%d %d %d", &n, &v, &k);
int i, j, kk;
for (i=0; i<n; i++) scanf("%d", &val[i]);
for (i=0; i<n; i++) scanf("%d", &vol[i]);
memset(dp, 0, sizeof(dp));

int a, b, c;
for (i=0; i<n; i++)
for (j=v; j>=vol[i]; j--)
{
for (kk=1; kk<=k; kk++)
{
A[kk] = dp[j-vol[i]][kk] + val[i];
B[kk] = dp[j][kk];
}
A[kk] = -1, B[kk] = -1;
a = b = 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;
}

1. 30/34才是新一代的侦搜打击一体平台。速度上差一点，但航程、挂载、机动、综合空战，甚至于机队的保养维护都是压倒性的优势。对于俄罗斯来说开发这样单机多任务的型号才符合目前的财政状况，而且适度阉割可以出口一大堆国家。米格31再怎么魔改，现在也找不到买家了，

2. 30/34才是新一代的侦搜打击一体平台。速度上差一点，但航程、挂载、机动、综合空战，甚至于机队的保养维护都是压倒性的优势。对于俄罗斯来说开发这样单机多任务的型号才符合目前的财政状况，而且适度阉割可以出口一大堆国家。米格31再怎么魔改，现在也找不到买家了，

3. 30/34才是新一代的侦搜打击一体平台。速度上差一点，但航程、挂载、机动、综合空战，甚至于机队的保养维护都是压倒性的优势。对于俄罗斯来说开发这样单机多任务的型号才符合目前的财政状况，而且适度阉割可以出口一大堆国家。米格31再怎么魔改，现在也找不到买家了，

4. 30/34才是新一代的侦搜打击一体平台。速度上差一点，但航程、挂载、机动、综合空战，甚至于机队的保养维护都是压倒性的优势。对于俄罗斯来说开发这样单机多任务的型号才符合目前的财政状况，而且适度阉割可以出口一大堆国家。米格31再怎么魔改，现在也找不到买家了，

5. 30/34才是新一代的侦搜打击一体平台。速度上差一点，但航程、挂载、机动、综合空战，甚至于机队的保养维护都是压倒性的优势。对于俄罗斯来说开发这样单机多任务的型号才符合目前的财政状况，而且适度阉割可以出口一大堆国家。米格31再怎么魔改，现在也找不到买家了，

6. 30/34才是新一代的侦搜打击一体平台。速度上差一点，但航程、挂载、机动、综合空战，甚至于机队的保养维护都是压倒性的优势。对于俄罗斯来说开发这样单机多任务的型号才符合目前的财政状况，而且适度阉割可以出口一大堆国家。米格31再怎么魔改，现在也找不到买家了，

7. 30/34才是新一代的侦搜打击一体平台。速度上差一点，但航程、挂载、机动、综合空战，甚至于机队的保养维护都是压倒性的优势。对于俄罗斯来说开发这样单机多任务的型号才符合目前的财政状况，而且适度阉割可以出口一大堆国家。米格31再怎么魔改，现在也找不到买家了，

8. 第2题，TCP不支持多播，多播和广播仅应用于UDP。所以B选项是不对的。第2题，TCP不支持多播，多播和广播仅应用于UDP。所以B选项是不对的。

9. 问题3是不是应该为1/4 .因为截取的三段，无论是否能组成三角形， x， y-x ，1-y,都应大于0，所以 x<y,基础应该是一个大三角形。小三角是大三角的 1/4.

10. 第一题是不是可以这样想，生了n孩子的家庭等价于n个家庭各生了一个1个孩子，这样最后男女的比例还是1:1