one Collector IITime Limit: 5000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 2179 Accepted Submission(s): 1142
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.
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
题意:第k优解问题。
思路:记录每个状态的前k优解,然后去重,更新当前状态的第k优解。
AC代码:
#include#include #include #include #include #include using namespace std; int a[105]; int dp[1005][35]; int va[105]; int vo[105]; bool cmp(int a,int b){ return a>b; } int main(){ int t; scanf("%d",&t); while(t--){ int k,n,m; scanf("%d%d%d",&n,&m,&k); for(int i=0;i =vo[i];j--){ int temp=0; for(int l=0;l
??