博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
NYOJ 45( 分治,大数)
阅读量:6942 次
发布时间:2019-06-27

本文共 1408 字,大约阅读时间需要 4 分钟。

分治的方法:

根据分治的思想可以推导出递推式:f(k)=4*f(k-1)+1,且f(1)=1;

可知需要用到大数乘法和加法。

#include 
#include
using namespace std;int main(){ int a[101][100]; memset(a,0,sizeof(a)); int tail=0; //指向最高位的索引 int value; int carry=0; a[1][0]=1; for(int i=2; i<=100; i++) { for(int j=0; j<=tail; j++) //大数乘法 f(k-1)*4 { value=a[i-1][j]*4+carry; a[i][j]=value%10; carry=value/10; if(j==tail&&carry!=0) tail++; }//从此循环出来时carry一定为0 a[i][0]++; //加 1 操作 for(int n=0; n<=tail; n++) { if(a[i][n]<=9) break; else { value=a[i][n]+carry; a[i][n]=value%10; carry=1; //因为是加1操作,只可能进1位 } if(n==tail&&carry!=0) tail++; } }    //输出 int cnt,k; cin>>cnt; while(cnt--) { cin>>k; if(k==1) { cout<<1<
=0; j--) cout<

优化:

1.可以用一维数组去替代二维数组

#include
#include
using namespace std;int main(){ int a[100]; //用一维数组去代替二维数组,优化空间复杂度 int n; cin>>n; while(n--) { memset(a,0,sizeof(a)); int k; cin>>k; if(k==1) { cout<<1<
=0; i--) cout<

转载于:https://www.cnblogs.com/zhanyeye/p/9746095.html

你可能感兴趣的文章
分布式服务器集群架构方案思考
查看>>
Graphviz使用简介(中文乱码的问题)
查看>>
Log4J使用
查看>>
【反编译系列】三、反编译神器(jadx)
查看>>
Xamarin Essentials教程安全存储SecureStorage
查看>>
[Maid] Write Tasks in Markdown with Maid
查看>>
tf.reducemean()到底是什么意思?
查看>>
像调试java一样来调试Redis lua
查看>>
What is Socket.IO?
查看>>
使用select实现非阻塞socket | dbafree首页
查看>>
The bug when Use Tomat in Eclipse
查看>>
wine 源
查看>>
抽象工厂资料汇总
查看>>
javascript 杂谈之哪种写法你更喜欢?
查看>>
nil localizedTitle in SKProduct
查看>>
EGORefreshTableHeaderView学习
查看>>
POJ3364
查看>>
爪哇国新游记之十一----用异常控制流程
查看>>
Oracle中rownum用法警示
查看>>
【转】Delphi调用webservice总结
查看>>