[DP] 51Nod1048 整数分解为2的幂 V2
来源:互联网 发布:兴达驾校网络预约系统 编辑:程序博客网 时间:2024/06/05 06:18
这题是 51Nod1383 的升级版。
做法是神奇的
设
转移就是
然后就是类似的每位合并。
神tm不给模数强行高精…..还卡常……
下面是未卡常的代码
#include<cstdio>#include<cstring>using namespace std;typedef long long LL;const int maxn=101,con=100000000;inline int max(int x,int y){ return x>y?x:y; }struct Int{ int a[205]; inline Int(int val=0){ memset(a,0,sizeof(a)); do a[++a[0]]=val%con, val/=con; while(val); } inline void sRead(){ static char st[6000]; scanf("%s",st+1); int len=strlen(st+1); a[0]=(len+7)/8; for(int i=1;i<=len;i++) a[(len+1-i+7)/8]=a[(len+1-i+7)/8]*10+st[i]-'0'; } inline void Print(){ printf("%d",a[a[0]]); for(int i=a[0]-1;i>=1;i--) printf("%08d",a[i]); } inline void operator += (const Int &b){ a[0]=max(a[0],b.a[0]); for(int i=1;i<=a[0];i++) a[i]+=b.a[i], a[i+1]+=a[i]/con, a[i]%=con; if(a[a[0]+1]) a[0]++; } inline Int operator * (const Int &b){ Int c; c.a[0]=a[0]+b.a[0]-1; LL v; for(int i=1;i<=a[0];i++) for(int j=1;j<=b.a[0];j++) v=(LL)a[i]*b.a[j], c.a[i+j]+=(v+c.a[i+j-1])/con, c.a[i+j-1]=(v+c.a[i+j-1])%con; if(c.a[c.a[0]+1]) c.a[0]++; while(c.a[0]>1&&!c.a[c.a[0]]) c.a[0]--; return c; } inline void operator /= (const int val){ LL x=0; for(int i=a[0];i>=1;i--) x=x*con+a[i], a[i]=x/val, x=x%val; while(a[0]>1&&!a[a[0]]) a[0]--; }} n,f[maxn][maxn],g[2][maxn],ans;int main(){ n.sRead(); f[0][0]=1; for(int i=1;i<=100;i++){ f[i][i]=1; for(int j=0;j<=i-1;j++) for(int k=0;k<=j;k++) f[i][j]+=f[i-1][k]*f[i-1-k][j-k]; } int now=0; for(int i=0;i<=100;n/=2,i++) if(n.a[1]&1){ now++; if(now==1){ for(int j=0;j<=i;j++) g[now&1][j]=f[i][j]; continue; } for(int j=0;j<=i;j++){ g[now&1][j]=0; for(int k=0;k<=j;k++) g[now&1][j]+=g[(now&1)^1][k]*f[i-k][j-k]; } } for(int i=0;i<=100;i++) ans+=g[now&1][i]; ans.Print(); return 0;}
阅读全文
0 0
- [DP] 51Nod1048 整数分解为2的幂 V2
- [DP]51 Nod——[1048 整数分解为2的幂 V2]
- [51Nod 1048] 整数分解为2的幂 V2
- 【51NOD 1048】【51NOD 1383】整数分解为2的幂 V2
- 整数分解为2的幂
- 1383 整数分解为2的幂
- 整数分解为2的幂
- 51nod 整数分解为2的幂
- 51nod-1383 整数分解为2的幂
- 【51Nod 1383】整数分解为2的幂
- 51nod 1383 整数分解为2的幂
- [51nod1383&1048]整数分解为2的幂
- 【51NOD 1383】整数分解为2的幂
- [51Nod 1383] 整数分解为2的幂
- 51nod 1383 整数分解为2的幂
- 51Nod-1383-整数分解为2的幂
- [递推] 51Nod1383 整数分解为2的幂
- 整数分解为2的幂数之和
- opengl从画三角形到画一个立方体(四)
- 经典滤波器设计
- HashMap 原理详解
- jdbc访问hive出现java.sql.SQLException: No suitable driver found for jdbc:hive的错误
- 第二章 Java并行程序基础
- [DP] 51Nod1048 整数分解为2的幂 V2
- 例题7-13 快速幂计算(Power Calculus, ACM/ICPC Yokohama 2006, UVa1374)
- OkHtttp拦截器
- 动态时间规整(DTW)
- 卡尔曼滤波推导
- GIT 团队协作快速入门使用
- linux基础总结(三)------ 用户态 内核态
- caffe + windows +cpu +vs2013安装与minist测试(中)
- 反射和代理