//状态方程和01背包类似,dp[j][k]表示背包容量为j的第k大背包的值。。。。。。。。。。

 //应当注意的是此时dp[j][1.....k]应当是递减的。。。。。。。。。。。。。。。。。。。。

 #include<stdio.h>

 #include<string.h>
#define Max(x,y) (x>y?x:y)
#define max_v 1000+10
#define max_k 30+5
#define max_n 100+5 int dp[max_v][max_k],w[max_n],c[max_n];
int q1[max_k],q2[max_k]; int main(){
int t;
scanf("%d",&t);
while(t--){
int n,v,k;
scanf("%d%d%d",&n,&v,&k);
memset(dp,,sizeof(dp));
for(int i=;i<=n;i++){
scanf("%d",&w[i]);
}
for(int i=;i<=n;i++){
scanf("%d",&c[i]);
}
for(int i=;i<=n;i++){
for(int j=v;j>=c[i];j--){
for(int kk=;kk<=k;kk++){
q1[kk]=dp[j-c[i]][kk]+w[i];
q2[kk]=dp[j][kk];
}
q1[k+]=q2[k+]=-;
int h=,h1=,h2=;
while(h<=k&&(h1<=k||h2<=k)){
if(q1[h1]>q2[h2]){
dp[j][h]=q1[h1];
h1++;
}
//else if(q1[h1]<q2[h2]){
else{
dp[j][h]=q2[h2];
h2++;
}
if(dp[j][h]!=dp[j][h-]){
h++;
}
}
}
}
// for(int i=1;i<=k;i++){
// printf("%d ",dp[v][i]);
// }
// puts("");
printf("%d\n",dp[v][k]);
}
}

最新文章

  1. ASP.NET 5运行时升级到Beta5
  2. Effective C++ 34 区分接口继承和实现继承
  3. CAS 4.0.0RC编译环境
  4. POJ 3259 Wormholes【Bellman_ford判断负环】
  5. C#中dynamic的正确用法 以及 typeof(DynamicSample).GetMethod(&quot;Add&quot;);
  6. 402. Remove K Digits
  7. Poj 3667
  8. 独立硬盘冗余阵列与HDFS
  9. 微软开源PowerShell并支持Linux和OS X
  10. Mac Outlook数据文件的位置
  11. java中Log4J的使用笔记
  12. 设置IIS下PHP环境的DOCUMENT_ROOT
  13. 第三次冲刺spring会议(第五次会议)
  14. git 利用分支概念实现一个仓库管理两个项目
  15. 一文让你彻底理解 Java NIO 核心组件
  16. Collections斗地主案例
  17. css和javascript代码写在页面中的位置说明
  18. oracle删除表字段和oracle表增加字段
  19. Kubernetes总结
  20. [转]git学习------&gt;git-rev-parse命令初识

热门文章

  1. PAT甲级——A1076 Forwards on Weibo
  2. sip会话流程以及sip介绍(1)
  3. java基础之BigDecimal类
  4. python3-常用模块之openpyxl(2)封装
  5. vue后台管理项目中菜单栏切换的三种方法
  6. ElasticSearch入门介绍之安装部署(二)
  7. PKU 百炼OJ 简单密码
  8. 嘴巴题8 BZOJ2318: Spoj4060 game with probability Problem
  9. 关于set的unordered特性
  10. Larval报错:后台上传图片,storage目录也有相应的图片,但前台访问不到图片。