SPOJ:Strange Waca(不错的搜索&贪心&剪枝)
Waca loves maths,.. a lot. He always think that 1 is an unique number. After playing in hours, Waca suddenly realize that every integer can be represented by digit '1', plus operator and minus operator. For example, 1534 can be represented as 1111 + 1 + 111 + 111 - 11 - 11 + 111 + 111. In that case, there are total 7 operators (plus and minus).
Now, Waca wants to know, what is the minimum number of operators needed to achieve X
Input
First row is an integer T, the number of test cases.
Next T rows will each contain an integer, X, the number given to Waca
Output
For each test cases, print an integer, the minimum number of operators needed to achieve X.
Example
Input:
2
1534
219 Output:
7
4
Constraints:
- 1 ≤ T ≤ 10
- 1 ≤ X ≤ 1012
题意:现在给定一个数N,问最小可以用多少个只含1的数表示出来,输出最小运算次数。比如219=111+111-1-1-1(4=3加+1减)
思路:首先先尝试贪心,发现没有什么必定的转发法则,而且每种只含1的数出现次数不超过10,而且不可能出现几次正几次负,因为这样都不是最优的。
所以用搜索来解决,再加一些剪枝。
搜索:对于当前数N,有三种去向:(以下X只含1,而且位数和N相同,如N=234,X=111;N=4324,X=1111;)
1,减若干个X,使得N-cnt1*X刚好大于等于0;
2,减若干个X,使得N-cnt2*X刚好小于等于0;
3,用比N高一位的X,减去N。
剪枝:这样最坏的情况下复杂度是O(T*10*3^12)=5*1e7(其中10是算位数),有些高,注意到第三种情况可以剪枝。假定N有L位,N小于当前5*10^L时,X-N>5*10^L,只会使情况更坏(其中X含L+1个1)
这样的最坏情况是O(T*10*2.5^12)=5*1e6。再加上次数限制的剪枝,肯定就没有问题了。
#include<cmath>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#define ll long long
using namespace std;
ll base[]={,,,,,,,,,,
,,,};
ll ans;
void dfs(ll N,ll times){
if(times>ans) return;
if(N==){ if(ans>times) ans=times;return ;}
ll tmp=N,L=;
while(tmp){ L++; tmp/=;}
if(N/base[L]) dfs(N-(N/base[L])*base[L],times+N/base[L]); //避免死循环
dfs((N/base[L]+)*base[L]-N,times+N/base[L]+);
if(N>=(base[L+]-base[L])/)dfs(base[L+]-N,times+); //剪枝
}
int main()
{
int T; ll N; cin>>T;
while(T--){
ans=;
scanf("%lld",&N);
dfs(N,);
printf("%lld\n",ans-);
}
return ;
}
SPOJ:Strange Waca(不错的搜索&贪心&剪枝)的更多相关文章
- ICPC Asia Nanning 2017 I. Rake It In (DFS+贪心 或 对抗搜索+Alpha-Beta剪枝)
题目链接:Rake It In 比赛链接:ICPC Asia Nanning 2017 Description The designers have come up with a new simple ...
- [CQOI2012]模拟工厂 题解(搜索+贪心)
[CQOI2012]模拟工厂 题解(搜索+贪心) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1327574 链接题目地址:洛谷P3161 BZOJ P26 ...
- 搜索(剪枝优化):HDU 5113 Black And White
Description In mathematics, the four color theorem, or the four color map theorem, states that, give ...
- [CF293B]Distinct Paths_搜索_剪枝
Distinct Paths 题目链接:http://codeforces.com/problemset/problem/293/B 数据范围:略. 题解: 带搜索的剪枝.... 想不到吧..... ...
- USACO 1.3... 虫洞 解题报告(搜索+强大剪枝+模拟)
这题可真是又让我找到了八数码的感觉...哈哈. 首先,第一次见题,没有思路,第二次看题,感觉是搜索,就这样写下来了. 这题我几乎是一个点一个点改对的(至于为什么是这样,后面给你看一个神奇的东西),让我 ...
- [清华集训2017]小 Y 和地铁(神奇思路,搜索,剪枝,树状数组)
世界上最不缺的就是好题. 首先考虑暴搜.(还有什么题是从这东西推到正解的……) 首先单独一个换乘站明显没用,只用考虑一对对的换乘站. 那么有八种情况:(从题解偷图) 然后大力枚举每个换 ...
- USACO 6.3 章节 你对搜索和剪枝一无所知QAQ
emmm........很久很久以前 把6.2过了 所以emmmmmm 直接跳过 ,从6.1到6.3吧 Fence Rails 题目大意 N<=50个数A1,A2... 1023个数,每个数数值 ...
- luogu P1526 [NOI2003]智破连环阵 搜索+最大匹配+剪枝
LINK:智破连环阵 考试的时候 题意没理解清楚 题目是指一个炸弹爆炸时间结束后再放另一个炸弹 而放完一个炸弹紧接另一个炸弹.题目中存在然后二字. 这样我们可以发现某个炸弹只会炸连续的一段. 但是 由 ...
- SGU 125 Shtirlits 搜索+可行性剪枝
500ms时限406ms水过…… 直接枚举肯定超时,需要剪枝. 枚举每个格子的元素,检查其左上角和正上方格子是否满足条件,若不满足不必再向下搜索. 在 这里 看到一个更好的方法: 枚举每个格子是哪个相 ...
随机推荐
- WebView跳转到底部
webview中有个computeVerticalScrollRange方法,是protected的,可以用反射,也可以自己写一个view继承webview,实现computeVerticalScro ...
- Codeforces 375 D Tree and Queries
Discription You have a rooted tree consisting of n vertices. Each vertex of the tree has some color. ...
- Mecanim动画编辑器 - 加入动画层实现并行动作
1.创建新的状态层 a) 通过下图的1button创建一个新的层 b) 通过下图2属性设置图层的权重.假设为0,则该图层的状态不会影响到总的状态机 c) Mask是设置动画的Avatar的关联节 ...
- BUPT复试专题—二进制数(2012)
https://www.nowcoder.com/practice/103dd589fed14457a673c613d8de3841?tpId=67&tqId=29634&tPage= ...
- 转: 性能测试应该怎么做? (from coolshell.cn)
转自: http://coolshell.cn/articles/17381.html 偶然间看到了阿里中间件Dubbo的性能测试报告,我觉得这份性能测试报告让人觉得做这性能测试的人根本不懂性能测试, ...
- Spring -- Bean自己主动装配&Bean之间关系&Bean的作用域
对于学习spring有帮助的站点:http://jinnianshilongnian.iteye.com/blog/1482071 Bean的自己主动装配 Spring IOC 容器能够自己主动装配 ...
- 三联动 支持ie6,ie7 省,市,区
三联动 支持ie6,ie7 省,市,区 <html xmlns="http://www.w3.org/1999/xhtml"> <head> <tit ...
- android学习笔记三--Activity 布局
1.线性布局 标签 :<LinearLayout></LinearLayout> 方向:android:orientation, 垂直:vertical 水平:Horizont ...
- MongoDB与MySQL的插入性能测试【转】
1.1 MongoDB的简单介绍 在当今的数据库市场上,MySQL无疑是占有一席之地的.作为一个开源的关系型数据库,MySQL被大量应用在各大网站后台中,承担着信息存储的重要作用.2009年,甲骨文 ...
- Intel CPU Microarchitecture
http://en.wikipedia.org/wiki/Intel_Tick_Tock Atom Roadmap[16] Fabrication process Microarchitectur ...