2017.4.19 数列 思考记录
来源:互联网 发布:淘宝小号注册机 编辑:程序博客网 时间:2024/06/07 00:06
这个题还是挺好的,虽然搞了半天
这个题特殊性质挺多的,抓住一个就好办了
首先 对于后面的次方数,前面的数的和肯定小于后面的一个次方数
所以没一个次方数的前面和后面一个都是独立的 可以考虑递推(其实就是半枚举)
然后由于加入一个数肯定是 递增的加前面的数的和 ,算出来的数也是递增的,所以直接把和放在后面即可,就不用排序了
码:
#include<iostream>#include<cstdio>using namespace std;long long f[3001],fang[3001],cnt,k,n,i,j;int main(){scanf("%lld%lld",&k,&n); fang[0]=1;for(i=1;i<=n&&fang[i-1]<=2100000000;i++){fang[i]=fang[i-1]*k;}f[0]=1; f[1]=0;cnt=0;for(i=0;i<n;i++){int lin=f[0];for(j=1;j<=lin;j++){ ++cnt; f[++f[0]]=f[j]+fang[i]; if(cnt==n) { printf("%lld",f[f[0]]); return 0; }}}}
似乎还有一种更简单的方法,就是直接转成2进制数、、
原理同上,利用二进制的1 0表示有无,满位进一的特性,可以轻松求出、、
码:
#include<iostream>#include<cstdio> using namespace std;long long k,n,f[3001],i,j,lin,cnt,ci,ans;int main(){scanf("%lld%lld",&k,&n);f[0]=1;for(i=1;i<=n&&f[i-1]<=2100000000;i++){f[i]=f[i-1]*k;}ci=0;while(n!=1){ans+=f[ci]*(n%2);n/=2;++ci;}ans+=f[ci];printf("%lld",ans);}
0 0
- 2017.4.19 数列 思考记录
- 2017.7.13 维修数列 思考记录
- 2017.4.19 细胞分裂 思考记录
- 2017.4.19 多项式输出 思考记录
- 2017.4.1 kth_number 思考记录
- 2017.4.16 车站 思考记录
- 2017.4.16 麦森数 思考记录
- 2017.4.20 火星人 思考记录
- 2017.7.19 Race 思考记录
- 2017.9.19 Gcd 思考记录
- 2017.4.5 假期的宿舍 思考记录
- 2017.4.16 阶乘之和 思考记录
- 2017.4.16 幂次方 思考记录
- 2017.4.16 级数求和 思考记录
- 2017.4.20 比例简化 思考记录
- 2017.4.21 螺旋矩阵 思考记录
- 2017.4.21 2^k进制数 思考记录
- 2017.4.22 进制转换 思考记录
- 关于485串口通信
- 解决Execution failed for task ':app:clean'. > Unable to delete directory问题
- vue2 router 动态传参,多个参数
- IMWeb训练营 todo list作业
- Android实现地图照片墙原理
- 2017.4.19 数列 思考记录
- python程序的加密和打包
- C++常用排序总结
- Spark源码分析之分区器的作用
- js data日期初始化
- Android Studio "佛祖保佑 永无bug" 注释模板设置详解(仅供娱乐)
- html5基本语法(一)
- 动态规划练习18:买书
- [BZOJ]2157: 旅游 树链剖分