RQNOJ123_多人背包_C++_Pascal
题目:http://www.rqnoj.cn/problem/123
不得不说,RQNOJ 的机子跑得好慢呀,5*107 的数据范围本地跑 0.2s,服务器上愣是把我卡掉了,最后只好写了一份 Pascal 交上去
本地跑

OJ上跑

咳咳,言归正传
普通的背包是求出最优的那一钟方案,方程转移是 f[i][j]=max(f[i-1][j],f[i-1][j-v[i]]+w[i]),相当于把 2 个变量经比较后丢到 1 个变量里,也就是 k=1时的情况
而现在我们需要求最优的前 k 组方案,那么可以把数组再增加一维,变成把 2k 个变量经比较后丢进k个数里,也就是 2 个线性表丢进 1 个线性表里,由于线性表内数据是单调下降的,则可以按照归并排序的做法做
实现操作中还可以滚掉第一维,那么 j 就要递减枚举
以下是 C++ 的,但是会TLE
#include<algorithm>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<cstdio>
#include<cmath>
using namespace std; const int V=,K=,maxint=;
int f[V][K],g[K];
int main()
{
int i,j,n,m,s,ans=,q1,q2,k,w,v;
scanf("%d%d%d",&m,&s,&n);
for (i=;i<=s;i++)
for (j=;j<=m;j++) f[i][j]=-maxint;
f[][]=;
for (i=;i<=n;i++)
{
scanf("%d%d",&w,&v);
for (j=s;j>=w;j--)
{
if (f[j-w][]<) continue;
q1=q2=;
for (k=;k<=m;k++)
if (f[j-w][q1]+v>f[j][q2]) g[k]=f[j-w][q1++]+v;
else g[k]=f[j][q2++];
for (k=;k<=m;k++) f[j][k]=g[k];
}
}
for (i=;i<=m;i++) ans+=f[s][i];
printf("%d\n",ans);
return ;
}
这个是 Pascal 的,可以AC
program xqz;
uses math;
const maxv=; maxk=;
type arr=array[..maxk] of longint;
var
c,w,i,j,m,n,k,mv,mk,l,r,b,p,e,s,t,v:longint;
yes:boolean;
f:array[..maxv,..maxk] of longint;
ans,now:int64;
procedure work(var a:arr; b,c:arr);
var l,r:longint;
begin
l:=; r:=;
while (l+r-<mk)and ((b[l]<>-)or(c[r]<>-)) do
begin
while (b[l]<>-)and((c[r]=-)or(b[l]>=c[r]+w))and(l+r-<mk) do
begin
a[l+r-]:=b[l]; inc(l);
end;
while (c[r]<>-)and((b[l]=-)or(b[l]<=c[r]+w))and(l+r-<mk) do
begin
a[l+r-]:=c[r]+w; inc(r);
end;
end;
end; begin
readln(mk,mv,n); fillchar(f,sizeof(f),$ff);
f[,]:=;
for i:= to n do
begin
readln(c,w); now:=now+c;
for j:=min(now,mv) downto c do
work(f[j],f[j],f[j-c])
end;
for k:= to mk do
inc(ans,f[mv,k]);
writeln(ans);
close(input); close(output);
end.
版权所有,转载请联系作者,违者必究
QQ:740929894
RQNOJ123_多人背包_C++_Pascal的更多相关文章
- P1858 多人背包
P1858 多人背包 题目描述 求01背包前k优解的价值和 要求装满 调试日志: 初始化没有赋给 dp[0] Solution 首先补充个知识点啊, 要求装满的背包需要初始赋 \(-inf\), 边界 ...
- 洛谷 P1858 多人背包 解题报告
P1858 多人背包 题目描述 求01背包前k优解的价值和 输入输出格式 输入格式: 第一行三个数\(K\).\(V\).\(N\) 接下来每行两个数,表示体积和价值 输出格式: 前k优解的价值和 说 ...
- [洛谷P1858] 多人背包
洛谷题目链接:多人背包 题目描述 求01背包前k优解的价值和 输入输出格式 输入格式: 第一行三个数K.V.N 接下来每行两个数,表示体积和价值 输出格式: 前k优解的价值和 输入输出样例 输入样例# ...
- 背包【p1858】 多人背包(次优解 or 第k优解)
题目描述--->p1858 多人背包 分析: 很明显,这题是背包问题的一种变形. 求解 次优解or第k优解. 表示刚开始有点懵,看题解也看不太懂. 又中途去补看了一下背包九讲 然后感觉有些理解, ...
- [XJOI]noip43 T2多人背包
多人背包 DD 和好朋友们要去爬山啦!他们一共有 K 个人,每个人都会背一个包.这些包的容量是相同的,都是 V.可以装进背包里的一共有 N 种物品,每种物品都有给定的体积和价值.在 DD 看来,合理的 ...
- 洛谷 P1858 多人背包 DP
目录 题面 题目链接 题目描述 输入输出格式 输入格式 输出格式 输入输出样例 输入样例 输出样例 说明 思路 AC代码 题面 题目链接 洛谷 P1858 多人背包 题目描述 求01背包前k优解的价值 ...
- 洛谷 P1858 多人背包
求01背包前k优解的价值和 输入输出格式 Input/output 输入格式:第一行三个数K.V.N(k<=50,v<=5000,n<=200)接下来每行两个数,表示体积和价值输出格 ...
- 【动态规划】【归并】Vijos P1412 多人背包
题目链接: https://vijos.org/p/1412 题目大意: 求01背包的前K优解,要求必须装满(1<=K<=50 0<=V<=5000 1<=N<=2 ...
- 【洛谷P1858】多人背包
题目大意:求解 0-1 背包前 K 优解的和. 题解:首先,可知对于状态 \(dp[j]\) 来说,能够转移到该状态的只有 \(dp[j],dp[j-w[i]]\).对于 K 优解来说,只需对状态额外 ...
随机推荐
- (洛谷)P2709 小B的询问
题目描述 小B有一个序列,包含N个1~K之间的整数.他一共有M个询问,每个询问给定一个区间[L..R],求Sigma(c(i)^2)的值,其中i的值从1到K,其中c(i)表示数字i在[L..R]中的重 ...
- TouTiao开源项目 分析笔记3
1.搭建NewsTabLayout片段 1.1.加载布局 @Nullable @Override public View onCreateView(LayoutInflater inflater, @ ...
- Javascript Step by Step - 03
前言 ajax 即“Asynchronous JavaScript and XML”(异步的JavaScript和XML).现在这个词的覆盖面有所扩展,把允许浏览器与服务器通信而无需刷新当前页面的技术 ...
- Python的类(一)
类(Class): 用来描述具有相同的属性和方法的对象的集合.它定义了该集合中每个对象所共有的属性和方法.对象是类的实例. 类变量:类变量在整个实例化的对象中是公用的.类变量定义在类中且在函数体之外. ...
- vue-cli 引入axios
写文章注册登录 首页 下载App × vue-cli 引入axios及跨域使用 星球小霸王 关注 2017.10.04 16:40* 字数 504 阅读 13038评论 2喜欢 18 使用 c ...
- 玩转Linux之内存管理-free
玩转Linux之内存管理-free free命令可以显示Linux系统中空闲的.已用的物理内存及swap内存,及被内核使用的buffer.在Linux系统监控的工具中,free命令是最经常使用的命令之 ...
- excel批量导入
https://www.cnblogs.com/mingyue1818/p/4828865.html
- [译]13-spring 内部bean
spring基于xml配置元数据的方式下,位于property元素或者contructor-arg元素内的bean元素被称为内部bean,如下: <?xml version="1.0& ...
- REMIX与LOCALHOST相连
REMIX与LOCALHOST相连 让Remix与本地文件系统进行交互,点击connect同时找到localhost下的Remix文件管理器的共享目录.在开始之前,参考网址: https://remi ...
- php利用PHPExcel类导出导入Excel用法
PHPExcel类是php一个excel表格处理插件了,下面我来给大家介绍利用PHPExcel类来导入与导出excel表格的应用方法,有需要了解的朋友不防参考参考(PHPExcel自己百度下载这里不介 ...