TOJ 1551 Power Hungry Cows -- 搜索
来源:互联网 发布:数据资产化运营 编辑:程序博客网 时间:2024/06/09 20:44
题目链接:http://acm.tzc.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=1551
题目大意:从数对(0, 1)开始,每次可以把两个数(可以取同一个数两次)相加或相减并替换原来的任意一个数,问得到给定的p的最少操作步数。
分析:一开始想用贪心,但是很快就发现不行。。。。没办法,只能搜索。由于一次变化最多得到8个新值(可以把a, b中的任意一个变为a + a, a + b, b + b, abs(a - b)),不加很强的优化是肯定不行的。
优化1:注意a一开始为0,所以第一个非零a一定等于上一次的b,后来的a也一定在之前的b中出现过。特别地,之后的每一次a + a一定等于之前的某一个b + b,所以a + a实际上是用不着的。
优化2:其次,由于每一次变化后得到的新值new_value都是a与b的线性组合,故一定有gcd(a, b) | new_value,换言之,如果gcd(a, b)不整除p,无解。
优化3:b不可能太大,我假设的是max(a, b) <= 2p,具体证明不会(正解性也未知)。
优化4:A*算法,用step表示当前操作次数。用auxi(x)表示每次把x加倍(或减半)使x不小于(或不大于)p的最小次数,那么每次取step + auxi(max(a, b))最小的数。注意代码中那一句very very important注释,加了这一句之后速度快的不是一点点,在我自己电脑上测试p = 20000时,不加这一句时间为6312ms,加了之后为110ms。
加了这几条之后也是900+ms过的。。。
- TOJ 1551 Power Hungry Cows -- 搜索
- poj 1945 Power Hungry Cows 启发式搜索
- 【BFS搜索】poj1945 Power Hungry Cows
- POJ1945 Power Hungry Cows (BFS)
- POJ 1945 Power Hungry Cows
- poj1945 Power Hungry Cows BFS
- POJ 1945 Power Hungry Cows 我的解法
- POJ 1945 Power Hungry Cows(打表技巧)
- poj 1945 Power Hungry Cows(BFS)(简单题)
- bzoj1669 Hungry Cows
- TOJ 3858 Home 搜索
- bzoj1669 [Usaco2006 Oct]Hungry Cows饥饿的奶牛
- [BZOJ1669][Usaco2006 Oct]Hungry Cows饥饿的奶牛
- BZOJ1669: [Usaco2006 Oct]Hungry Cows饥饿的奶牛
- 1669: [Usaco2006 Oct]Hungry Cows饥饿的奶牛
- BZOJ1669: [Usaco2006 Oct]Hungry Cows饥饿的奶牛
- bzoj 1669: [Usaco2006 Oct]Hungry Cows饥饿的奶牛 暴力
- bzoj 1669: [Usaco2006 Oct]Hungry Cows饥饿的奶牛
- MySQL 三种关联查询的方式: ON vs USING vs 传统风格
- IntentService实现下载
- 【Android】UiAutomator简要介绍
- Ear、Jar、War文件之间有何不同?它们分别使用在哪种环境下?
- fragment 使用过程中单例模式引发的问题
- TOJ 1551 Power Hungry Cows -- 搜索
- 防网站采集非常有效的办法
- Hadoop Map Reduce Secondary Sort
- CentOS查看系统版本信息
- 第十四周 项目2-形状类族的中的纯虚函数
- ubuntu下编写c语言程序
- 净网行动进行中,你的网站躺枪了吗?
- 商店管理系统代码
- ubuntu下android反编译