题面

题目链接

洛谷 P1858 多人背包

题目描述

求01背包前k优解的价值和

输入输出格式

输入格式

第一行三个数 $ K,V,N $

接下来每行两个数,表示体积和价值

输出格式

前 $ k $ 优解的价值和

输入输出样例

输入样例

2 10 5
3 12
7 20
2 4
5 6
1 1

输出样例

57

说明

对于100%的数据, $ K \leq 50,V \leq 5000,N \leq 200 $

【时空限制】

1000ms,128MB

思路

求k优解。可以考虑开二维数组f[v][k],表示装v体积物品的第k优解

加入每一件物品时,就要更新f[V]到f[v[i]]的值。对于新的f[v],应该是当前的f[v]与f[v-v[i]]+w[i]合并后的序列,取其中前k优就好了

AC代码

#include<bits/stdc++.h>
const int maxk=60;
const int maxn=210;
const int maxv=5010;
using namespace std; int k,V,n;
int v[maxn],w[maxn];
int f[maxv][maxk];
int ans; int main()
{
scanf("%d%d%d",&k,&V,&n);
for(int i=1;i<=n;i++) scanf("%d%d",&v[i],&w[i]);
for(int i=0;i<=V;i++)
for(int j=0;j<=k;j++)
f[i][j]=-100000;
f[0][1]=0;
for(int i=1;i<=n;i++)
{
for(int j=V;j>=v[i];j--)
{
int p1=1,p2=1,tmp[maxk];
while(p1+p2-1<=k)
{
if(f[j][p1]>f[j-v[i]][p2]+w[i]) tmp[p1+p2-1]=f[j][p1],p1++;
else tmp[p1+p2-1]=f[j-v[i]][p2]+w[i],p2++;
}
for(int t=1;t<=k;t++) f[j][t]=tmp[t];
}
}
for(int t=1;t<=k;t++) ans+=f[V][t];
printf("%d",ans);
return 0;
}

洛谷 P1858 多人背包 DP的更多相关文章

  1. 洛谷 P1858 多人背包 解题报告

    P1858 多人背包 题目描述 求01背包前k优解的价值和 输入输出格式 输入格式: 第一行三个数\(K\).\(V\).\(N\) 接下来每行两个数,表示体积和价值 输出格式: 前k优解的价值和 说 ...

  2. [洛谷P1858] 多人背包

    洛谷题目链接:多人背包 题目描述 求01背包前k优解的价值和 输入输出格式 输入格式: 第一行三个数K.V.N 接下来每行两个数,表示体积和价值 输出格式: 前k优解的价值和 输入输出样例 输入样例# ...

  3. 洛谷P1858 多人背包 多人背包板子题/多人背包学习笔记

    ,,,本来自以为,我dp学得还挺好的 然后今天一考发现都不会啊QAQ 连最基础的知识点都不清楚啊QAQ 所以就来写个题解嘛! 先放下板子题 其实我jio得,这题只要大概了解方法就不是很难鸭,,,毕竟是 ...

  4. 洛谷 P1858 多人背包

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

  5. 解题:洛谷 p1858 多人背包

    题面 设$dp[i][j]$表示容量为$i$时的第$j$优解,因为是优解,肯定$dp[i][j]$是随着$j$增大不断递减的,这样的话对于一个新加进来的物品,它只可能从两个容量的转移的前$k$优解中转 ...

  6. 洛谷P1156 垃圾陷阱[背包DP]

    题目描述 卡门――农夫约翰极其珍视的一条Holsteins奶牛――已经落了到“垃圾井”中.“垃圾井”是农夫们扔垃圾的地方,它的深度为D(2<=D<=100)英尺. 卡门想把垃圾堆起来,等到 ...

  7. P1858 多人背包

    P1858 多人背包 题目描述 求01背包前k优解的价值和 要求装满 调试日志: 初始化没有赋给 dp[0] Solution 首先补充个知识点啊, 要求装满的背包需要初始赋 \(-inf\), 边界 ...

  8. 洛谷 P5279 - [ZJOI2019]麻将(dp 套 dp)

    洛谷题面传送门 一道 dp 套 dp 的 immortal tea 首先考虑如何判断一套牌是否已经胡牌了,考虑 \(dp\)​​​​​.我们考虑将所有牌按权值大小从大到小排成一列,那我们设 \(dp_ ...

  9. 洛谷2344 奶牛抗议(DP+BIT+离散化)

    洛谷2344 奶牛抗议 本题地址:http://www.luogu.org/problem/show?pid=2344 题目背景 Generic Cow Protests, 2011 Feb 题目描述 ...

随机推荐

  1. 6.Spring【AOP】XML方式

    1.AOP术语 1. Joinpoint(连接点):所谓连接点是指那些被拦截到的点.在spring中,这些点指的是方法,因为spring只支持方法类型的连接点 2. Pointcut(切入点):所谓切 ...

  2. 07.Hibernate常用的接口和类---Session接口☆☆☆☆☆

    一.特点 Session是在Hibernate中使用最频繁的接口.也被称之为持久化管理器.它提供了和持久化有关的操作,比如添加.修改.删除.加载和查询实体对象 Session 是应用程序与数据库之间交 ...

  3. idea打包可执行jar

    (1)在项目上鼠标右键 --> Open Module Settings 或者点击工具栏上的 (2)Artifacts --> + --> JAR --> From modul ...

  4. parameter–key parameters

    http://www.tweakers.fr/timings.html -Cas# Latency (tCL).Number of clocks that elapses between the me ...

  5. Mysql8+mybatisGenerator (mysql 8的逆向工程)

    最近试了一下mysql8的逆向工程工具 1.xml <?xml version="1.0" encoding="UTF-8" ?> <!DOC ...

  6. 1008-Redo

    关于flag,都立下了 T1 考试的时候就觉得是贪心,但是不会反悔emm…… 于是正解就是一个堆优化可反悔的贪心=.= 每次找前面最小的,于是是小根堆. 我们在交易的时候发现后面的一个可以更优. 于是 ...

  7. 同名的cookie会不会存在多个

    cookie new了多个.同一个名字.会不会存在多个呢. //若果不设置Cookie的path,则名字相同的Cookie视为相同的Cookie,后面的覆盖前面的,注意:大小写敏感 Cookie c1 ...

  8. 关于使用注解设置token免拦截 和 必要 的权限拦截

    先说一下这样子做的原理:将某一个注解配置在方法头部,在spring实例化的时候会将注解以切面的形式注入给方法,在拦截的地方判断当前方法有没有注入指定的注解类. 1.先声明一个注解类(类中不需要做任何逻 ...

  9. 2019.10.29 csp-s模拟测试93 反思总结

    T1: 求出前缀和,三维偏序O(nlog2n)CDQ 二维其实就可以 #include<iostream> #include<cstdio> #include<cstri ...

  10. TZOJ 4021 Ugly Problem(线段树区间子段最大)

    描述 给定一个序列A[0],A[1],…A[N-1],要求找到p0,p1,p2,p3使得A[p0]+A[p0+1]+…+A[p1] + A[p2]+A[p2+1]+…+A[p3]最大(0<=p0 ...