2017.4.21 2^k进制数 思考记录
来源:互联网 发布:淘宝装修市场 编辑:程序博客网 时间:2024/05/21 11:36
题目很长很坑爹 读了半天才知道什么意思 原来是数位dp、、、
然而我第一次打时用滚动数组忘了消除上一维的影响 (本次不能调用本次)
然后还要用dt的高精 然后调试的时候查看里不能有赋值语句、、不然直接影响主程序、
另外压位是很麻烦的、、、 这个题高精要开到100,但不用压位也可以过、
码:
#include<iostream>#include<cstdio>using namespace std;#include<cmath>#define ll long longll f[2][600][150],qian[600][150],ans[150],w,k,shang,zui,now,i,j; void gjj(int a,int b,int c){ll jin=0,lin=0;for(int i=1;i<=100;i++){lin=jin; jin=(qian[a+1][i]+f[b][c][i]+jin)/10; qian[a][i]=(qian[a+1][i]+f[b][c][i]+lin)%10;}}void fuzhi(int a){for(int i=1;i<=100;i++)f[now][a][i]=qian[a+1][i];}void gjj2(int a){ll jin=0,lin=0;for(int i=1;i<=100;i++){lin=jin; jin=(ans[i]+f[now][a][i]+jin)/10; ans[i]=(ans[i]+f[now][a][i]+lin)%10;}}int main(){scanf("%lld%lld",&k,&w);ll wei=w/k;if(w%k)wei++,zui=pow(2,w%k);shang=pow(2,k);for(i=1;i<shang;i++){f[now][i][1]=1;}now^=1;for(i=2;i<=wei;i++,now^=1){ //cout<<shang<<" "; if(i!=wei||!zui){ for(j=shang-1;j>=1;j--)gjj(j,now^1,j);//qian[j]=qian[j+1]+f[now^1][j]; for(j=1;j<shang;j++) fuzhi(j),gjj2(j);//f[now][j]=qian[j+1];ans+=f[now][j] }else { for(j=shang;j>=1;j--)gjj(j,now^1,j); for(j=1;j<zui;j++) fuzhi(j),gjj2(j); }}bool flag=0;for(i=100;i>=1;i--){if(flag){printf("%lld",ans[i]);continue;}if(ans[i]){ flag=1,printf("%lld",ans[i]);}}}
其实这个题可以用组合数,但高精乘高精相对难写、、
0 0
- 2017.4.21 2^k进制数 思考记录
- 2017.4.21 螺旋矩阵 思考记录
- 2017.7.18 树上距离=k 思考记录
- 2017.4.1 kth_number 思考记录
- 2017.4.16 车站 思考记录
- 2017.4.16 麦森数 思考记录
- 2017.4.19 数列 思考记录
- 2017.4.19 细胞分裂 思考记录
- 2017.4.20 火星人 思考记录
- 2017.8.21 弦论 思考记录
- 2017.4.5 假期的宿舍 思考记录
- 2017.4.16 阶乘之和 思考记录
- 2017.4.16 幂次方 思考记录
- 2017.4.16 级数求和 思考记录
- 2017.4.19 多项式输出 思考记录
- 2017.4.20 比例简化 思考记录
- 2017.4.22 进制转换 思考记录
- 2017.4.25 解方程 思考记录
- 程序员的故事
- 使用git码云为unity版本控制1
- hdu 1698 Just a Hook(线段树)
- Java sdut acm 3869购物车
- LightOJ-1265-Island of Survival (概率dp)
- 2017.4.21 2^k进制数 思考记录
- 对所提取的ip进行有效性检测
- 内连接(inner join)
- eclipse Java 运行环境配置之添加已安装的 JRE(Java Runtime Environment)
- textile 自定义文本格式
- Java核心技术II:为多个客户端服务
- 链表的有序集合
- 利用session实现用户登录
- git相关资料