题目背景

Salamander见到路边有如此多的毒瘤,于是见猎心喜,从家里拿来了一个大袋子,准备将一些毒瘤带回家。

题目描述

路边共有nn 种不同的毒瘤,第i 种毒瘤有k_i 个,每个需要占据d_i 的空间。Salamander的袋子能装下的最大体积为m 。

Salamander是一个很贪心的人,不过他也不要求带尽可能多或是总体积尽可能大的毒瘤回家,他只要求袋子里再也装不下剩余的任何一种毒瘤。

Salamander想知道有多少种不同的装毒瘤的方案。两种方案不同当且仅当取的毒瘤种类不同或者至少有一种毒瘤取的数量不同。由于方案数可能太多,请输出答案对19260817 取模后的结果。

输入输出格式

输入格式:

第一行包括两个正整数nn 、mm ,表示毒瘤的种类数和袋子的大小。

接下来的nn 行,每行两个正整数k_i​ 、d_i​ ,表示一种毒瘤。

输出格式:

一行,表示不同的方案数对19260817 取模后的结果。

输入输出样例

输入样例#1:

2 5
2 3
3 1
输出样例#1:

2

说明

样例解释:

两种方案如下:

1.取1个第一种毒瘤和2个第二种毒瘤。

2.取3个第二种毒瘤。

~  ~

对于10%的数据,1\leq n,k_i,d_i\leq 101≤n,ki​,di​≤10 ,1\leq m\leq 1001≤m≤100 ;

对于30%的数据,1\leq n,k_i,d_i\leq 501≤n,ki​,di​≤50 ,1\leq m\leq 50001≤m≤5000 ;

对于另外20%的数据,k_i=1ki​=1 ;

对于100%的数据,1\leq n,k_i,d_i\leq 5001≤n,ki​,di​≤500 ,1\leq m\leq 10^5。

多重背包的一个烂大街的优化就是单调队列,这个没啥好说的。。

本题可以枚举剩的最小的体积是哪个背包,一旦最小的确定了那么对答案有贡献的dp数组的坐标范围就确定了。

所以我们把物品按体积降序排序之后依次加入然后更新答案即可。。

(我当然不会告诉你这个题坑特别多)

#include<bits/stdc++.h>
#define ll long long
#define maxn 100005
using namespace std;
const int ha=19260817;
int f[2][maxn],n,m;
int V,tot,sum;
struct node{
int v,num;
bool operator <(const node &u)const{
return v<u.v;
}
}a[505];
int ans=0; inline int add(int x,int y){
x+=y;
if(x>=ha) x-=ha;
return x;
} inline int X(int x,int y){
x-=y;
if(x<0) x+=ha;
return x;
} int main(){
scanf("%d%d",&n,&V);
for(int i=1;i<=n;i++){
scanf("%d%d",&a[i].num,&a[i].v);
tot+=a[i].num*a[i].v;
}
sort(a+1,a+n+1); if(tot<=V){
puts("1");
return 0;
} f[0][0]=1;
int now=0,pre;
for(int i=n;i;i--){
tot-=a[i].num*a[i].v;
pre=now,now^=1; int base=a[i].v,len=base*a[i].num; for(int j=0;j<base;j++){
sum=0;
for(int u=j;u<=V;u+=base){
sum=add(sum,f[pre][u]);
if(u-j>=len) sum=X(sum,f[pre][u-len]);
f[now][u]=sum;
}
} int tp=V-tot;
for(int j=max(0,tp-a[i].v+1);j<=tp;j++) ans=add(ans,f[now][j]);
for(int j=len;j<=V;j++) f[now][j]=add(f[now][j],f[pre][j-len]);
} printf("%d\n",ans);
return 0;
}

  

洛谷 U19159 采摘毒瘤的更多相关文章

  1. 洛谷P4241 采摘毒瘤

    传送门 完了我连背包都不会了…… 考虑暴力,先枚举最小的数是哪个,设大小为$d_i$,个数为$k_i$,所有比它小的数的总和是$sum$,然后把所有比它小的全都装进背包,它以及比他大的做一个多重背包, ...

  2. 洛谷 P4240 - 毒瘤之神的考验(数论+复杂度平衡)

    洛谷题面传送门 先扯些别的. 2021 年 7 月的某一天,我和 ycx 对话: tzc:你做过哪些名字里带"毒瘤"的题目,我做过一道名副其实的毒瘤题就叫毒瘤,是个虚树+dp yc ...

  3. 洛谷P4240 毒瘤之神的考验 【莫比乌斯反演 + 分块打表】

    题目链接 洛谷P4240 题解 式子不难推,分块打表真的没想到 首先考虑如何拆开\(\varphi(ij)\) 考虑公式 \[\varphi(ij) = ij\prod\limits_{p | ij} ...

  4. 洛谷P2179 骑行川藏

    什么毒瘤... 解:n = 1的,发现就是一个二次函数,解出来一个v的取值范围,选最大的即可. n = 2的,猜测可以三分.于是先二分给第一段路多少能量,然后用上面的方法求第二段路的最短时间.注意剩余 ...

  5. 洛谷模拟NOIP考试反思

    洛谷模拟NOIP考试反思 想法 考了这么简单的试qwq然而依然emmmmmm成绩不好 虽然本次难度应该是大于正常PJ难度的但还是很不理想,离预估分数差很多qwq 于是就有了本反思嘤嘤嘤 比赛链接 原比 ...

  6. [洛谷日报第62期]Splay简易教程 (转载)

    本文发布于洛谷日报,特约作者:tiger0132 原地址 分割线下为copy的内容 [洛谷日报第62期]Splay简易教程 洛谷科技 18-10-0223:31 简介 二叉排序树(Binary Sor ...

  7. 洛谷P4689 [Ynoi2016]这是我自己的发明(莫队,树的dfn序,map,容斥原理)

    洛谷题目传送门 具体思路看别的题解吧.这里只提两个可能对常数和代码长度有优化的处理方法. I 把一个询问拆成\(9\)个甚至\(16\)个莫队询问实在是有点珂怕. 发现询问的一边要么是一个区间,要么是 ...

  8. 洛谷P4581 [BJOI2014]想法(玄学算法,拓扑排序)

    洛谷题目传送门 萝卜大毒瘤 题意可以简化成这样:给一个DAG,求每个点能够从多少个入度为\(0\)的点到达(记为\(k\)). 一个随机做法:给每个入度为\(0\)的点随机一个权值,在DAG上求出每个 ...

  9. 洛谷P4891 序列(势能线段树)

    洛谷题目传送门 闲话 考场上一眼看出这是个毒瘤线段树准备杠题,发现实在太难调了,被各路神犇虐哭qwq 考后看到各种优雅的暴力AC......宝宝心里苦qwq 思路分析 题面里面是一堆乱七八糟的限制和性 ...

随机推荐

  1. winform-windowsmediaplayer设置可视化效果之条形

    winform导入windowsmediaplayer这个COM组件,他的默认可视化效果为: 而我们需要的可视化效果为: 则我们可以通过代码更改可视化效果:(参数value设为4即可!) //设置可视 ...

  2. 重现ssd遇到的问题

    首先是create_list.sh和create_data.sh中的data_dir的路径得修改. 然后是在create_data.sh文件调用$caffe_root下的scripts目录中的crea ...

  3. CS231n——图像分类(KNN实现)

    图像分类   目标:已有固定的分类标签集合,然后对于输入的图像,从分类标签集合中找出一个分类标签,最后把分类标签分配给该输入图像.   图像分类流程 输入:输入是包含N个图像的集合,每个图像的标签是K ...

  4. hadoop-hdfs(三)

    HDFS概念 1 数据块* HDFS的一个数据块默认是64M,与元数据分开管理. 优点: 数据块的大小设计的较大,所以寻址占传输的时间比例较小,只需要计算传输速度即可. 便于简化管理,利于计算剩余空间 ...

  5. 团队Alpha版本(七)冲刺

    目录 组员情况 组员1(组长):胡绪佩 组员2:胡青元 组员3:庄卉 组员4:家灿 组员5:凯琳 组员6:翟丹丹 组员7:何家伟 组员8:政演 组员9:黄鸿杰 组员10:刘一好 组员11:何宇恒 展示 ...

  6. 团队Alpha版本冲刺(六)

    目录 组员情况 组员1(组长):胡绪佩 组员2:胡青元 组员3:庄卉 组员4:家灿 组员5:凯琳 组员6:翟丹丹 组员7:何家伟 组员8:政演 组员9:黄鸿杰 组员10:刘一好 组员11:何宇恒 展示 ...

  7. Linux 网卡特性配置ethtool详解

    近期遇到一个自定义报文传输性能问题,解决过程中借助了ethtool这个工具,因此发掘一下与此工具相关的网卡的一些特性. ethtool 常用命令如下,比如对eth0的操作: ethtool eth0 ...

  8. linux下的静态库和共享库

    转载&&增加:      我们在编写一个C语言程序的时候,经常会遇到好多重复或常用的部分,如果每次都重新编写固然是可以的,不过那样会大大降低工作效率,并且影响代码的可读性,更不利于后期 ...

  9. Servlet 中 RequestDispacher 请求与分发

    RequestDispacher 请求与分发使用HttpServletRequest的getRequestDispatcher()方法取得 Login.java页面 package control; ...

  10. Java常用实体类

    System类 访问系统属性 - 遍历 package org.zln.usefulclass.system; import java.util.Properties; /** * Created b ...