埃及数字的代码实现
2016-10-31 22:39
106 查看
</pre><p>中间居然用int会数据溢出,注意用LL就行了,IDA*算法 深度迭代的应用<em></em></p><p></p><pre name="code" class="cpp">#include<cstdio> #include<iostream> #include<cstring> using namespace std; unsigned long long u,d,cnt=1,ans[1000],best[1000]; unsigned long long gcd(unsigned long long a,unsigned long long b){ if(b>a)a^=b^=a^=b; return b>0?gcd(b,a%b):a; } void pure(unsigned long long&a,unsigned long long&b){ unsigned long long c=gcd(a,b); a=a/c; b=b/c; //对ab进行通分 } unsigned long long okmin(unsigned long long u,unsigned long long d){ unsigned long long i=0; while(1){ if(i*u>=d){ return i; } i++; } } void better(unsigned long long maxd){ //更新较好的答案 bool jd=true; for(unsigned long long i=0;i<=maxd;i++)cout<<ans[i]<<" "; cout<<"\n"; for(int i=maxd;i>=0;i--){ if(ans[i]>best[i]){ jd=true; break; } } if(jd||best[0]==-1){ for(unsigned long long i=0;i<=maxd;i++){ best[i]=ans[i]; } } } bool t=false; //作为找到解的标志 void dfs(unsigned long long maxd,unsigned long long curd,unsigned long long maxn){ if(maxd<curd){ better(maxd); t=true; return; } unsigned long long g=okmin(u,d); g=max(g,maxn+1); while((maxd-curd+1)*d>=u*g){ //基于深度的枝剪 unsigned long long tu=u,td=d; ans[curd]=g; u=u*g-d; d=td*g; pure(u,d); dfs(maxd,curd+1,g); u=tu; d=td; g++; } } int main(){ while(cin>>u>>d){ t=false; pure(u,d); cout<<"case "<<cnt++<<" \n"; unsigned long long maxd=-1; memset(best,-1,sizeof(best)); while(1){ maxd++; unsigned long long tem=okmin(u,d); dfs(maxd,0,tem-1); if(t)break; } for(unsigned long long i=0;i<=maxd;i++)cout<<best[i]<<" "; } }
相关文章推荐
- JavaScript 抽奖效果实现代码 数字跳动版
- php中文字母数字验证码实现代码
- js对数组中的数字从小到大排序实现代码
- python中将阿拉伯数字转换成中文的实现代码
- asp.net中3种验证码示例(实现代码)(数字,数字字母混和,汉字)
- C#实现的【阿拉伯数字转换成中文大写金额】代码(原创)
- 『JavaScript』限制Input只能输入数字实现思路及代码
- @V@ java代码笔记2010-06-12:java控制台输入各类型类实现;以及判断输入字符串里面是否有数字的两种方法:方法1:转换成字符数组;方法2:正则表达式。
- python中将阿拉伯数字转换成中文的实现代码
- 用表格输出1-1000之间的数字实现代码(附特效)
- 抛砖引玉&#8212;&#8212;实现LISTVIEW点击COLUMN排序的代码,可实现按时间,字符,数字
- JavaScript 抽奖效果实现代码 数字跳动版
- 数字转化成字符串 (自己用代码实现)
- 代码实现EditText只能输入数字
- javascript数字数组去重复项的实现代码
- php中文字母数字验证码实现代码
- 编写代码实现从输入流中分析出数字串(C++)
- 无代码实现infopath2007表单合并中数字加和
- asp.net中3种验证码示例(实现代码)(数字,数字字母混和,汉字)
- 『JavaScript』限制Input只能输入数字实现思路及代码