牛场围栏(vijos 1054)
题目大意:
给出N种木棍(每种木棍数量无限)的长度(<=3000),每根木棍可以把它切掉[1,M]的长度来得到新的木棍。 求最大的不能被组合出来的长度。 如果任何长度都能组合出来或者最大值没有上限输出-1. (1<N<100, 0<=M<3000),
解题过程:
1.这题就是USACO 4.1的麦香牛块 ,只不过 数据 加强了下。 当时就把它当做 背包 来做,然后确定一个较大的范围(当时就选了60000),求出这个范围里的长度能否都被组合出来,如果能就输出-1. 否则输出最大的不能被组合出来的长度。。 nocow里大多也是如此,但是为什么这样可以,貌似没人给出较好的证明(至少我是没看懂,感觉是错的)
2.再看此题,此题的每根木棍的长度范围变成了3000(麦香牛块那题才10),难以确定一个拿来做的范围。。看了题解(在vijos题解栏里最下面)后大有收获,下面给出做法。
首先还是有很多人选了一个范围来做,有点碰运气的味道,而下面的方法 要严谨的多:
1.首先预处理出所有能搞出来的原始木棍长度,然后找到一个最小的,记为P。 如果P=1那就不用做下去了,直接输出-1.
2.我们把所有的整数按mod P的值分为P类(mod P=0,1,2,3,4...P-1),记为集合Q0,Q1,Q2...QP-1 如果集合Qi 中有一个长度len可以被组合出来,那么该集合中所有比len大的数也一定可以组合出来.因为是mod P的,所以len可以不断加P来组合出 比它大的且和它在同一个集合里的数。 根据这个性质 就可以 找到图论模型了。
3.我们抽象出P-1个点,分别表示集合Qi 中最小的能被组合出来的数D[i]。 那么把根据原始木棍的长度,可以在这些点之间连边,表示可以从Qi 中的一个数 加 X 得到 Qj中的一个数。
然后利用spfa算法 就可以 求出 “集合Qi 中最小的能被组合出来的数”了。 具体实现的时候有个小优化可以减少边的数量,就是如果多条边的权值 mod P 相等,那么只要加入其中的一条就可以了(根据同余定理)。
4.那么如何根据最后D[i]的值来得到答案呢? 还是利用性质“如果集合Qi 中有一个长度len可以被组合出来,那么该集合中所有比len大的数也一定可以组合出来”来做。依次检查每一个D[i],如果D[i]>i,那么集合Qi 中最大的不能被组合出来的数 就是 D[i]-P。检查所有的D[i] 取最大值就是答案了。
总结:非常灵活的图论+数论题,图论模型的转化非常巧妙,真心好题,收获很大。
牛场围栏(vijos 1054)的更多相关文章
- LG2662 牛场围栏 和 test20181107 数学题
P2662 牛场围栏 题目背景 小L通过泥萌的帮助,成功解决了二叉树的修改问题,并因此写了一篇论文, 成功报送了叉院(羡慕不?).勤奋又勤思的他在研究生时期成功转系,考入了北京大学光华管理学院!毕业后 ...
- luoguP3951 小凯的疑惑/P2662 牛场围栏
其实就是当年sxy给我讲的墨墨的等式,只是当时比较菜听得似懂非懂. 小凯的疑惑 去年noipday1t1,当时随便猜了个结论结果猜对了,现在瞎证一下,答案是a*b-a-b. 设a为a,b中较小的一个, ...
- 【同余最短路】洛谷 P2662 牛场围栏
关于同余最短路的部分 [同余最短路]P3403跳楼机/P2371墨墨的等式 [P2662牛场围栏] 题目背景 小L通过泥萌的帮助,成功解决了二叉树的修改问题,并因此写了一篇论文, 成功报送了叉院(羡慕 ...
- vijos 1054 牛场围栏 【想法题】
这题刚看完后第一个想到的方法是背包 但仔细分析数据范围后会发现这题用背包做复杂度很高 比如对于这样的数据 2 100 2999 2898 (如果有神犇可以用背包过掉这样的数据 请回复下背包的做法) - ...
- Luogu2662 牛场围栏(最短路)
小凯的疑惑升级版的升级版.答案若存在不会超过30002-3000,暴力dp似乎勉强可以过.当然这不优美. 注意到如果能拼出长度为l的围栏,就一定能拼出长度为l+kx的围栏,其中x为最短的(或任意一个) ...
- luogu P2662 牛场围栏
传送门 因为一个木板可以切掉最多\(m\),所以可以先预处理哪些长度的木板可用,开个桶,然后对\([l-m,l]\)打标记,再把打了标记的数取出来 假设可用长度\(a_1,a_2,,,a_n\)从小到 ...
- 洛谷 P2662 牛场围栏
做法是这样的: 首先暴力把所有可能的边长搞出来..(当然<=0的不要) 排序边长+去重, 当且仅当可行边长里面有1时,任何长度都能取到,输出-1 当且仅当所有可行边长的gcd大于1时,不能取到的 ...
- P1578 奶牛浴场
P1578 奶牛浴场 题目描述 由于John建造了牛场围栏,激起了奶牛的愤怒,奶牛的产奶量急剧减少.为了讨好奶牛,John决定在牛场中建造一个大型浴场.但是John的奶牛有一个奇怪的习惯,每头奶牛都必 ...
- 洛谷1578:[WC2002]奶牛浴场——题解
https://www.luogu.org/problemnew/show/P1578#sub 由于John建造了牛场围栏,激起了奶牛的愤怒,奶牛的产奶量急剧减少.为了讨好奶牛,John决定在牛场中建 ...
随机推荐
- Debian8系统下,caffe的安装
特此声明:本文不允许用于商业目的,允许转载(注明一下啦). 首先,官方的参考文献为:http://caffe.berkeleyvision.org/installation.html. 现在开始: 安 ...
- myeclipse黑色主题怎么还原
删除workspace-->.metadata-->.plugins-->org.eclipse.core.runtime
- 闹钟--alarmManager
1.AlarmManager,顾名思义,就是“提醒”,是Android中 常用的一种系统级别的提示服务,在特定的时刻为我们广播一个指定的Intent.简单的说就是我们设定一个时间,然后在该时间到来 时 ...
- eclipse+adt+sdk开发环境搭配
1.开发环境配置 http://www.mamicode.com/info-detail-516839.html
- JDK里面常用的包
1.java.lang-------java里的核心类,如String.Math.Integer.System.Thread,java.lang里还有一个子包:java.lang.reflect用于实 ...
- MySQL 函数积累
IFNULL(expr1,expr2) // 如果expr1不是NULL,IFNULL()返回expr1,否则它返回expr2.IFNULL()返回一个数字或字符串值 IF(expr1,expr2,e ...
- HTML5 localStorage and sessionStorage
转载至:http://blog.csdn.net/fdipzone/article/details/25517615 HTML5 提供两种web存储方法,localStorage 与 sessionS ...
- input上传图片预览
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <t ...
- Windows Azure免费空间如何搭建PHP网站/数据库、域名绑定
7月份,阿象为大伙介绍了中国版Windows Azure如何建站.自定义远程虚拟机,最高可选四核.28G内存的服务器,相信不少站长.开发者用户大呼过瘾.不过Azure建站系统仅支持SQL数据库,并不支 ...
- [svn] 分支开发
参考博客: http://www.cnblogs.com/cxd4321/archive/2012/07/12/2588110.html (1)为什么要使用SVN分支开发和主干合并? 目的:在SVN下 ...