题目背景

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;
}

  

转载于:https://www.cnblogs.com/JYYHH/p/8443248.html

洛谷 U19159 采摘毒瘤相关推荐

  1. 洛谷P1086花生采摘c语言

    洛谷P1086花生采摘 最近在学习洛谷上的题,以后会持续更新的 文章目录 **洛谷P1086花生采摘** 思想 代码 题目描述 输入格式 思想 具体思想利用深搜,算出他剩下的时间是否足够采摘下一个花生 ...

  2. 信息学奥赛一本通 1927:【04NOIP普及组】花生采摘 | OpenJudge NOI 1.13 38:花生采摘 | 洛谷 P1086 [NOIP2004 普及组] 花生采摘

    [题目链接] ybt 1927:[04NOIP普及组]花生采摘 OpenJudge NOI 1.13 38:花生采摘 洛谷 P1086 [NOIP2004 普及组] 花生采摘 [题目考点] 1. 模拟 ...

  3. 洛谷P4319 变化的道路

    题意:给定图,每条边都有一段存在时间.求每段时间的最小生成树. 解:动态MST什么毒瘤...洛谷上还是蓝题... 线段树分治 + lct维护最小生成树. 对时间开线段树,每条边的存在时间在上面会对应到 ...

  4. 洛谷 P3958 奶酪

    谨以此题来纪念我爆炸的NOIp2017 这个题虽然很多人说是并查集,但是搜索也是毫无压力的,考场搜索细节写挂,爆了个不上不下的80分.今天无意看到这道题,终于AC 首先这道题要考虑一下精度问题,虽然出 ...

  5. 洛谷日报 2020年3月前索引

    2020 2019 2018 感觉洛谷日报全是干货!!!先记下来再说 2020 年洛谷日报索引 3 月 #260[dove]Church 编码(和 Lambda 演算) https://www.luo ...

  6. 洛谷日报索引(2020、2019、2018)

    历年洛谷日报索引 2020 2019 2018 感觉洛谷日报全是干货!!!先记下来再说 2020 年洛谷日报索引 3 月 #260[dove]Church 编码(和 Lambda 演算) https: ...

  7. [转载]洛谷日报索引

    2019年 6月 #183[朝田诗乃]你以为莫队只能离线?莫队的在线化改造 https://shoko.blog.luogu.org/moqueue #182[Heartlessly ]常用距离算法详 ...

  8. 信息学切题记录:永远的A+B Problem(洛谷P1001)

    作为一个CF灰名(丢脸啊,打比赛从绿名掉到了这个层次)的蒟蒻,我决定发篇文章记录一下我在洛谷上的第一道题目(A+B Problem),这道题,正常人一眼解决,但是为了凸显自己的大佬 蒟蒻身份,我要装逼 ...

  9. NOIP2016·洛谷·天天爱跑步

    初见安~这里是传送门:洛谷P1600 题目描述 小c同学认为跑步非常有趣,于是决定制作一款叫做<天天爱跑步>的游戏.<天天爱跑步>是一个养成类游戏,需要玩家每天按时上线,完成打 ...

  10. CSP 2020 S 蒟蒻的游记 (洛谷同步)

    我是傻逼,第一次考,太没有经验了 T1: 毒瘤模拟- 我 if + 计算函数 打+调了2小时 ... 样例WA了 心态炸了- T2. 我没学过如何计算并保存一个数的每一个二进制位- 但是,蒟蒻也是个S ...

最新文章

  1. Concurrency 学习 (Mac iphone)
  2. 【Windows 逆向】OD 调试器工具 ( 推荐汉化版的 OD 调试工具 | 吾爱破解专用版Ollydbg | 备选工具 )
  3. 【iOS 开发】基本 UI 控件详解 (UIButton | UITextField | UITextView | UISwitch)
  4. R语言与Tableau集成之可视化应用
  5. 敏捷测试理论以及实践(2)
  6. ▲为什么要用css Sprite技术?
  7. Centos7 下载、安装、配置、启动部署
  8. Tensorflow 学习笔记 vs code 的用户配置
  9. flutter 序列化_如何在Flutter中序列化对象
  10. CentOS升级Python到2.7版本
  11. 点云配准(CloudCompare软件)
  12. php 绕不过的laravel,php – 为什么在Laravel中不能轻松下载大文件?
  13. 下载Instagram的图片
  14. Mysql-多表查询
  15. 如何自学VR虚拟现实技术?VR简单上手教程
  16. 【剖析 | SOFARPC 框架】之SOFARPC 连接管理与心跳剖析
  17. [李景山php] web 安全资料篇
  18. WIN2008R2修改远程桌面端口(不重启系统)
  19. 3D建模软件测试自学,收藏:5个自学3DMAX教程以及3D模型资源的网站
  20. Java 12 Shenandoah GC

热门文章

  1. 今日恐慌与贪婪指数为15 恐慌程度有所上升
  2. 信诺科学计算机说明书,计算机科学技术专业简介(Introduction to computer science and technology).doc...
  3. python爬取58同城二手房信息_动手写爬虫(2):爬取58同城二手物品信息
  4. VERY DEEP CONVOLUTIONAL NETWORKS FOR LARGE-S CALE IMAGE RECOGNITION-论文笔记
  5. Android8.1 MTK平台 修改系统默认语言和默认输入法
  6. 【lstm预测】基于lstm实现时间序列数据预测matlab源码
  7. beyond compare this license key has been revoked
  8. kali linux 账号管理
  9. 摘录 | 《记一忘三二》
  10. html中半圆怎么写,css怎么写半圆?