07day2
居然是动规专场。这样不好吧?
采药
【问题描述】
辰辰是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师。为此,他想拜附近最有威望的医师为师。医师为了判断他的资质,给他出了一个难题。医师把他带到一个到处都是草药的山洞里对他说:"孩子,这个山洞里有一些不同的草药,采每一株都需要一些时间,每一株也有它自身的价值。我会给你一段时间,在这段时间里,你可以采到一些草药。如果你是一个聪明的孩子,你应该可以让采到的草药的总价值最大。"
如果你是辰辰,你能完成这个任务吗?
【输入】
输入的第一行有两个整数 n 和 m,用一个空格隔开。m 代表总共能够用来采药的时间,n 代表山洞里的草药的数目。接下来的 n 行每行包括两个整数,分别表示采摘某株草药的时间 Ti 和这株草药的
价值 Vi。
【输出】
输出包括一行,这一行只包含一个整数,表示在规定的时间内,可以采到的草药的最大总价值。
【输入样例】
3 9
10 10
8 1
1 2
【输出样例】
3
【数据规模】
对于 50%的数据,n,m≤1000;
对于 100%的数据,n,m≤100000,Ti,Vi≤10。
【解题过程】
这个题目描述几乎和 NOIP2006 的那道采药一毛一样以至于我差点写了裸的 01背包。看到数据范围实在吓了一跳。但是要注意这个很强的限制:Ti,Vi≤10。也就是说 Ti*Vi 最多有 121 种取值(姑且算上 0 的情况),那么这 10^6 个物品中大多数都是重复的,可以合并为同一种物品。然后就是多重背包了,二进制拆分就能过。
第一次提交 AC。
方格取数
【问题描述】
给定一个 n×m 的矩阵,记录左上角为(1,1),右下角为(n,m),现在从(1,1)开始取数,每次只能向下或向右移动一个单位,最终到达(n,m),我们把路径上所有的数相乘,结果记为 C。使 C 的结果最大已经不能满足我们了,现在我们想让 C 末尾的零个数最少。
PS. 11000 末尾有三个零,100000100 末尾有两个零。
【输入】
第一行是两个正整数 n 和 m,表示矩阵大小。
接下来 n 行每行 m 个正整数,给出了整个矩阵。
【输出】
一个整数:最少的零的个数。
【输入样例】
3 3
1 2 3
10 5 100
10 8 9
【输出样例】
1
【数据规模】
对 30%的数据有:n,m≤5;
对 100%的数据有:1<n,m≤1000,所有输入数据不超过 32 位整数范围。
【解题过程】
乘积末尾 0 的个数取决于所有乘数质因数分解后 2 和 5 的个数的较小值。但是很难做到同时兼顾两个最小,那就可以用 f(i, j) 表示最少取到的 2 的个数,g(i, j) 表示最少取到的 5 的个数,我们取 f(n, m) 和 g(n, m) 中的较小值就是答案。
一开始有疑问,如果 f(n, m) 走过的路中 5 反而少于 2 呢?假设这个过程中取到的 5 的个数为 x,则 x>=g(n,m),也就是说这种情况在 g(n, m) 中就已经考虑到了;反过来,g(n, m) 取的 2 的个数少于 5 的个数也没有关系。
可以预处理出每个点上的数字分解后有几个2 几个 5.
但是要注意边界条件,把走不到的点设成 INF。
第一次提交 20 分左右。
统计
【问题描述】
对于排列(P1,P2,P3,…Pn),定义(i,j)为逆序对当且仅当 i<j 且 Pi>Pj。统计{1,2,3,…,n}的所有排列中,逆序对数量为 m 的排列个数。
【输入】
仅一行,两个正整数 n,m。
【输出】
仅一个整数,表示满足条件的排列个数对 124567 取模。
【输入样例】
3 1
【输出样例】
2
【数据规模】
对于 30%的数据,有 n≤10;
对于 100%的数据,有 0<n,m≤1000。
【解题过程】
这数据范围简直就是赤裸裸的暗示啊。
用 f(i, j) 表示 1...i 这些数的排列中逆序对有 j 对的情况数,则
f(i, j) = sum{ f(i-1, k), k<=j }
注意必须用前缀和优化。
第一次提交 AC。
07day2的更多相关文章
- 二模07day2解题报告
T1.采药(medic) 有n个草药,要在m的时间内获得最大价值. 乍一看像是01背包,然而数据只能过50分. 考虑数据范围,t<=10,w<=10,所以只有121种草药.考虑多重背包的二 ...
随机推荐
- (转) C++ static、const和static const 以及它们的初始化
const定义的常量在超出其作用域之后其空间会被释放,而static定义的静态常量在函数执行后不会释放其存储空间. static表示的是静态的.类的静态成员函数.静态成员变量是和类相关的,而不是和类的 ...
- HDU 2126 Buy the souvenirs (01背包,输出方案数)
题意:给出t组数据 每组数据给出n和m,n代表商品个数,m代表你所拥有的钱,然后给出n个商品的价值 问你所能买到的最大件数,和对应的方案数.思路: 如果将物品的价格看做容量,将它的件数1看做价值的话, ...
- 安装微软ASP.NET MVC 4,运行以下的包管理器控制台命令
(菜鸟,勿喷,有错求指正)Asp.net 新建的类库中安装MVC4 .下面是步骤,1+2:打开程序包管理控制台,3:运行Install-Package Microsoft.AspNet.Mvc - ...
- Android 注入详解
Android下的注入的效果是类似于Windows下的dll注入,关于Windows下面的注入可以参考这篇文章Windows注入术.而Android一般处理器是arm架构,内核是基于linux,因此进 ...
- 李洪强漫谈iOS开发[C语言-043]-判断较早日期
李洪强漫谈iOS开发[C语言-043]-判断较早日期
- WPF之快速实现拖拽功能
场景:工具栏上有很多图标(一个图标代表一种控件),可以左键按下图标,然后拖拽到设计区域创建一个个的控件. 实现:1.给工具栏上的图标添加MouseLeftDown和MouseMove事件,前者事件是为 ...
- 【原创】如何在Android中为TextView动态设置drawableLeft等
如何在Android中为TextView动态设置drawableLeft等 两种方式: 方式1:手动设置固有边界 Drawable drawable = getResources().getD ...
- MyBatis学习总结_19_Mybatis传多个参数(三种解决方案)
据我目前接触到的传多个参数的方案有三种. 第一种方案 DAO层的函数方法 Public User selectUser(String name,String area); 对应的Mapper.xm ...
- 设置 Firewalld 防火墙控制对系统的访问
1.检查 server101 的网卡,记住第二个网卡的名称 [root@server101 ~]# nmcli device DEVICE TYPE STATE CONNECTION br0 brid ...
- python 中的map 详解
python中的map函数应用于每一个可迭代的项,返回的是一个结果list.如果有其他的可迭代参数传进来,map函数则会把每一个参数都以相应的处理函数进行迭代处理.map()函数接收两个参数,一个是函 ...