noj [1480] 懒惰的风纪委Elaine (多重背包)
http://ac.nbutoj.com/Problem/view.xhtml?id=1480
[1480] 懒惰的风纪委Elaine
- 时间限制: 1000 ms 内存限制: 65535 K
- 问题描述
Elaine是学园都市中的一个风纪委,每天都会接到命令对某个街道进行检查,并抓捕危险分子。她所在的风纪委支部附近有M条街道。这些街道由北到南并排均匀的分布在一条直线上,每条街道之间的距离都为1。但是众所周知,Elaine是一个很懒很懒的人(-..-说我坏话!!被我看到了!!),她不想一步一步走完所有街道,但好在她的好友Kuso为她制作了大量的传送卷轴。不过,因为Kuso的能力等级太低,他制作的卷轴有严重的缺点,他的卷则只能向南飞一段固定的距离(当然,他预先制作了很多种类的卷轴),而Elaine所在的风纪委支部却在最北边。每一次出去检查,Elain都要使用好几张卷轴。但如果是某些不能传送到的地方,Elaine只能走过去了。不过回来的话,她就可以用自带的传送系统传送到支部的传送点。
有一天,Elaine想知道,如果她从风纪委支部出发,可以检查那些街道。她手里有N种传送卷轴(1,2,3,,,N),每个卷轴可以传送的距离为Ai,卷轴的数量为Ci。则Elaine靠那些卷轴,可以不走路而直接传送的有哪些街道?
- 输入
- 数据有多组输入。每一组数据的第一行有两个数:N,M(0<N<=100,0<M<=1000)。分别表示传送卷轴的种类数和街道数量。在第二行有2N个数,A1,A2,A3...An,C1,C2,C3...Cn (1<=Ai<=100000,1<=Ci<=1000)。数据输入以0 0结束。
- 输出
- 每组数据占一行,输出一个数,为Elaine可以传送到的街道总数。
- 样例输入
3 10 1 2 4 2 1 1 2 5 1 4 2 1 0 0
- 样例输出
8 4
- 先将多重背包转换成01背包,然后在求解01背包:
- 任何一个正整数N 都可以分解成 N = 2^0 + 2^1 + 2^2+......+(剩下不足2^n的部分)
- 例如:13 = 1 + 2 + 4 + 6
- 这里是对数量进行拆分; 这样的好处可以很好的降低复杂度,从O(N*N)降到O(N*logN)
1 #include<iostream> 2 #include<cstring> 3 #include<cstdio> 4 #include<vector> 5 using namespace std; 6 7 int dp[1010]; 8 int a[110]; 9 vector<int> v; 10 11 int main() 12 { 13 int n,m; 14 while(scanf("%d%d",&n,&m)&&n&&m) 15 { 16 17 int i,j; 18 for(i=0;i<n;i++) 19 { 20 scanf("%d",&a[i]); 21 } 22 23 //多重背包转换成01背包 24 v.clear(); 25 int t; 26 for(i=0;i<n;i++) 27 { 28 int nc; 29 scanf("%d",&nc); 30 t=1; 31 while(t<=nc) 32 { 33 v.push_back(t*a[i]); 34 nc-=t; 35 t=t*2; 36 } 37 if(nc>0){ 38 v.push_back(nc*a[i]); 39 } 40 } 41 42 //01背包求解过程 43 memset(dp,0,sizeof(dp)); 44 dp[0]=1; 45 int sum=0; 46 for(i=0;i<v.size();i++) 47 { 48 for(j=sum==m?m-v[i]:sum;j>=0;j--) //这个用到优化j=sum==m?m-v[i]:sum,这个优化是必要的,不然TLE 49 { 50 if(dp[j]!=0&&j+v[i]<=m){ 51 dp[j+v[i]]=1; 52 } 53 } 54 sum+=v[i]; 55 if(sum>m) 56 { 57 sum=m; 58 } 59 } 60 int cnt=0; 61 for(i=1;i<=m;i++) 62 { 63 if(dp[i]) 64 { 65 cnt++; 66 } 67 } 68 printf("%d\n",cnt); 69 } 70 return 0; 71 }
转载于:https://www.cnblogs.com/crazyapple/p/3202179.html
noj [1480] 懒惰的风纪委Elaine (多重背包)相关推荐
- c++ 多重背包状态转移方程_【模板】各种背包问题amp;讲解
[模板]各种背包问题&讲解 背包问题集合 一般来说,动态规划(DP)都是初学者最难闯过的一关,而在这里详细解说动态规划的一种经典题型:背包问题. 这里介绍的背包分为以下几种:01背包,完全背 ...
- 单调队列多重背包时间复杂度O(vn)
版权声明:本文为博主原创文章,未经博主允许不得转载. 多重背包问题: 有N种物品和容量为V的背包,若第i种物品,容量为v[i],价值为w[i],共有n[i]件.怎样装才能使背包内的物品总价值最大? 网 ...
- 背包问题(多重背包+0-1背包)
一:0-1背包问题 #include<iostream> #include<algorithm> #include<cstring> const int maxn= ...
- 背包模型dp1:01背包,完全背包,多重背包的两大优化的详解
01背包问题: 状态表示:f[i][j]表示从只从前i个物体里面选,切总体积不超过j的选法的集合状态表示:f[i][j]表示从只从前i个物体里面选,切总体积不超过j的选法的集合状态表示:f[i][j] ...
- POJ 3260 多重背包+完全背包
前几天刚回到家却发现家里没网线 && 路由器都被带走了,无奈之下只好铤而走险尝试蹭隔壁家的WiFi,不试不知道,一试吓一跳,用个手机软件简简单单就连上了,然后在浏览器输入192.168 ...
- hdu 3732(01背包转多重背包)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3732 思路:这么大的数据,用01背包肯定会TLE的,01背包转多重背包..最多也就11*11=121件 ...
- 动态规划 4、基础背包问题总结(多重背包与多重背包的转化)
描述: 有N种物品和一个容量为V的背包.第i种物品最多有n[i]件可用,每件费用是c[i],价值是w[i].求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大. 变式:有的物品 ...
- 多重背包单调队列优化思路_多重背包之单调队列优化理论性总结
多重背包之单调队列优化: 若用F[j]表示对容量为j的背包,处理完前i种物品后,背包内物品可达到的最大总价值,并记m = min(n, j / v).放入背包的第i种物品的数目可以是:0.1.2--, ...
- HDU 2079 选课时间(题目已修改,注意读题) 母函数 || 多重背包
今天做这题才知道原来母函数的原型不是从第二个括号开始,那不过是优化而已,除了1^n,2^n那种类型可以从2开始外其他都要从1开始.好了,上代码吧. #include<stdio.h> in ...
- Lightoj 1231 - Coin Change (I) (裸裸的多重背包)
题目链接: Lightoj 1231 - Coin Change (I) 题目描述: 就是有n种硬币,每种硬币有两个属性(价值,数目).问用给定的硬币组成K面值,有多少种方案? 解题思路: 赤果果的 ...
最新文章
- Visual Studio2005无法启动web调试的真正原因
- 图片预览组件PhotoView
- lvm 扩展根目录_Linux下lvm在线扩容步骤
- oracle中触发器只能用于表吗,Oracle触发器的分类和使用
- python程序的name属性作用是什么_python __name__ == ‘__main__’详细解释+例子
- new file会创建文件吗_Python处理文件—os模块
- OAuth2.0 授权码认证方式使用流程
- IntelliJ IDEA 中使用 Lambok (注解无效问题的解决)
- (已更新)漫画小程序更新修复接口,自动采集资源,漫画源码漫画小程序源码简单即可发布
- IDEA放大和缩小代码字体的快捷键设置
- ARM Cortex M3处理器概述
- 车联网也需要“走对路”,用户需求“导航”小度车载OS持续领先
- 给软件添加鼠标右键快捷方式
- 有关球 圆柱 圆锥 的计算
- SM敏捷实践经验总结
- Elasticsearch 同义词配置
- BI 不是可以拖拉拽取数吗?为什么还要 SQL 取数 ?
- 个人能力以外的资本都为0_能力之外的资本等于零--可是我们就缺这个零
- 关于黎曼猜想论文开头部分引用的欧拉公式
- SEO优化 - 使用nginx301重定向顶级域名到www二级域名
热门文章
- 计算机领域经典书籍推荐
- 老人步履蹒跚,警惕骨关节炎
- php 快递鸟 批量打印,电子面单批量打印接口简易手册(快递鸟)
- 从程序员到项目经理(二十八):该死的结果导向(只看结果,不问过程到底行不行?)
- 【PyQt5与Requests爬虫】设计图形界面(GUI)实现小说下载器-进度条显示
- xp系统怎么进pe修改计算机名,PE下安装原版XP系统装系统图文教程
- matplotlib之2010-2017年各季度国民生产总值散点图
- git强制拉取最新代码
- 思翼FM30高频头转发模式
- 多线程问题,实现三个线程顺序循环输出123123123...