求01背包前k优解的价值和
输入输出格式 Input/output
输入格式:
第一行三个数K、V、N(k<=50,v<=5000,n<=200)
接下来每行两个数,表示体积和价值
输出格式:
前k优解的价值和

解题思路:

这个题刚开始没做出来只能说是因为我没有认真地去看那个叫背包九讲的东西(这里附网址 http://wenku.baidu.com/view/519124da5022aaea998f0f22.html)

背包九讲中第九讲明确给出求次小值及第k小值的办法,做两个队列,b1,b2,用于储存选这个物品和不选这个物品的最大价值,然后取最大值进行合并(类似归并排序)

 1 program ManyBag;
 2 var ans,i,j,l,q1,q2,t,k,n,v,sv,w:longint;
 3     f:Array[0..50,0..5000] of longint;//f[i,j]表示第i大的背包,在体积为j时的体积
 4     b1,b2:array[1..50] of longint;
 5 begin
 6     read(k,sv,n);
 7     for i:=0 to sv do
 8     for j:=0 to k do f[j,i]:=-1000;//对数组赋一个极小值
 9     f[1,0]:=0;//第1大的数值在体积为0时价值为0
10     for i:=1 to n do
11     begin
12         read(v,w);
13         for j:=sv downto v do if f[1,j-v]>=0 then
14         begin
15             fillchar(b1,sizeof(b1),0);
16             fillchar(b2,sizeof(b2),0);
17             q1:=1; q2:=1;
18             for l:=1 to k do
19             begin
20                 b1[l]:=f[l,j];//不选的队列
21                 b2[l]:=f[l,j-v]+w;//选的队列
22                 if b1[q1]>b2[q2] then
23                 begin
24                     f[l,j]:=b1[q1];
25                     inc(q1);//用下一个数比较
26                 end
27                 else
28                 begin
29                     f[l,j]:=b2[q2];
30                     inc(q2);
31                 end;
32             end;
33         end;
34     end;
35     for i:=1 to k do ans:=ans+f[i,sv];
36     writeln(ans);
37 end.

转载于:https://www.cnblogs.com/wuminyan/p/4728373.html

洛谷 P1858 多人背包相关推荐

  1. 洛谷 1858 多人背包

    https://www.luogu.org/problem/show?pid=1858 题目描述 DD 和好朋友们要去爬山啦!他们一共有 K 个人,每个人都会背一个包.这些包的容量是相同的,都是 V. ...

  2. 洛谷——3399 丝绸之路(背包)

    题目背景 张骞于公元前138年曾历尽艰险出使过西域.加强了汉朝与西域各国的友好往来.从那以后,一队队骆驼商队在这漫长的商贸大道上行进,他们越过崇山峻岭,将中国的先进技术带向中亚.西亚和欧洲,将那里的香 ...

  3. 洛谷——P2083 找人

    P2083 找人 题目背景 无 题目描述 小明要到他的同学家玩,可他只知道他住在某一单元,却不知住在哪个房间.那个单元有N层(1,2--N),每层有M(1,2--M)个房间. 小明会从第一层的某个房间 ...

  4. 洛谷P1169 树上分组背包

    题解 第一次写树上分组背包的题目. 什么是分组背包? 分组背包就是将物品进行分组每组内部只能选择一类物品. for(int i = 1;i <= N;++i){for(int j = 0;j & ...

  5. 洛谷 P1048 采药 01背包入门

    P1048 采药 最近想学dp了 一道非常简单入门的01背包,写此博客做一个教训,对01背包还不是特别熟,动态方程很容易就推出来了,但是写二维状态方程时wa了,然后改为一维过了. 主要还是对01背包不 ...

  6. 洛谷P4495 奇怪的背包 [HAOI2018] 数论

    正解:数论+dp 解题报告: 传送门! 首先看到这题,跳无数次,自然而然可以想到之前考过好几次了的一个结论--如果只考虑无限放置i,它可以且仅可以跳到gcd(p,v[i]) 举一反三一下,如果有多个i ...

  7. bzoj1334 洛谷P4394 选举 01背包

    题目链接:传送门 题目描述 NNN个政党要组成一个联合内阁,每个党都有自己的席位数. 现在希望你找出一种方案,你选中的党的席位数要大于总数的一半,并且联合内阁的席位数越多越好. 对于一个联合内阁,如果 ...

  8. luogu P1858 多人背包

    嘟嘟嘟 既然让求前\(k\)优解,那么就多加一维,\(dp[j][k]\)表示体积为\(j\)的第\(k\)优解是啥(\(i\)一维已经优化掉了). 考虑原来的转移方程:dp[j] = max(dp[ ...

  9. 【题解】洛谷P1541 [NOIP2010TG] 乌龟棋(类似背包的DP)

    题目来源:洛谷P1541 思路 类似背包的题 总之就是四种卡牌取的先后顺序不同导致的最终ans不同 所以我们用一个四维数组每一维分别表示第几种取了几张的最大分数 然后就是简单DP解决 代码 #incl ...

  10. 洛谷 p1757 通天之分组背包(哈希,分组背包)2021-08-12

    题目背景 直达通天路·小 A 历险记第二篇 题目描述 自 01 背包问世之后,小 A 对此深感兴趣.一天,小 A 去远游,却发现他的背包不同于 01 背包,他的物品大致可分为 k 组,每组中的物品相互 ...

最新文章

  1. 最小化安装linux CentOS-6.6后 部署fastdfs +下载地址 很干很干的干货
  2. Linux_正则表达式
  3. lt;备份gt;10月18日 DNS
  4. Android 70道面试题汇总不再愁面试
  5. 微信公众号接口权限表汇总
  6. android网络请求回调管理,Android HTTP网络请求的异步实现
  7. java super实例_java Super 用法详解及实例代码
  8. spring的aware学习
  9. ODAC(V9.5.15) 学习笔记(四)TCustomDADataSet(2)
  10. 测试必备:if条件测试( if-else语句、if-elif-else语句、多个elif代码块、省略else代码块、测试多个条件)
  11. maven项目引入新依赖问题
  12. 如何设置linux端口桥接,怎么在linux下配置桥接?
  13. leetcode python3 简单题191. Number of 1 Bits
  14. 解决git配置公钥仍然需要输入密码问题
  15. java 获取当前时分_java实现获取当前年、月、日 、小时 、分钟、 秒、 毫秒
  16. 编程语言为什么不能用中文
  17. python文献翻译_Python实现一键翻译英文论文,实现了pdf文档英译汉,pdf格式不变...
  18. 最新2022中国大学排名发布!
  19. HTTP知识点总结 - 转载
  20. 数据库中如何备份数据

热门文章

  1. 绝地求生大逃杀常用英语
  2. C#WinForm程序 窗口不在任务栏显示的处理方法
  3. 移动联通设置呼叫转移
  4. 2020年执业药师考试,5个锦囊助你做好最后冲刺!
  5. 星际争霸 虚空之遗 人族5BB 操作流程
  6. Ubuntu下切换root用户认证失败解决方案
  7. DSP2837x ECAP调试(BLDC霍尔)
  8. 21届本科大数据菜鸡:我是怎么在互联网寒冬拿到腾讯、华为、京东、美团、快手等大厂offer的?
  9. 使用GCC和Makefile编译c文件
  10. 八大资管业务类型汇总