第K大背包问题
现在01的基础上多加一维,dp[v][k],表示在v下第k大的价值。。。
用A[ ],B[ ];分别记录加入第i件物品的前k个最大价值,不加入第i件物品的前k个最大价值
取两个数组的前k大值
也可以用一个数组存,再排序,找前k项
#include<stdio.h>
#include<string.h>
int dp[1010][40];
int main()
{
int i,m,n,V[110],W[110],j,k,A[40],B[40],t,a,b,c,v;
scanf("%d",&t);
while(t--)
{
scanf("%d%d%d",&n,&v,&k);
for(i=0;i<n;i++)
scanf("%d",&W[i]);
f......
阅读全文