如果我们设f[i]为4个柱子时把i个东东从一个柱子移到另一个柱子所用的最少步骤,设g[i]为3个柱子时对应的值,我们可以得到f[n]=min{2*f[k]+g[n-k]},其中g[i]是已知的为2^i-1。

然后接着就搞不下去了,看了别人报告说要找规律。有了上面的式子之后,我们打印前60个解还是很好打印的,同时把f[i]-f[i-1]也打印出来,这时会发现f[i]-f[i-1]都是2的某次方,而且2的k次方一共连续出现了k+1次,于是我们就可以以这个特征为依据预处理出所有解了

#include <iostream>
#include <cstdio>
#include <string.h>
#include <algorithm>
using namespace std;
typedef long long ll;
const int mod=;
struct Bignumber{
int V[];
int len;
void clear(){
memset(V,,sizeof(V));
len=;
}
Bignumber operator *( int od){
Bignumber ans;
ans.clear();
for(int i=; i<len; ++i){
ans.V[i]+=V[i]*od;
ans.V[i+]+=(ans.V[i])/mod;
ans.V[i]%=mod;
}
ans.len=len;
while(ans.V[ans.len]>){
ans.V[ans.len+]+=ans.V[ans.len]/mod;
ans.V[ans.len]%=mod;
ans.len++;
}
return ans;
}
Bignumber operator +( Bignumber od){
Bignumber ans;
ans.clear();
int L=max(len,od.len);
for(int i=; i<L; ++i){
ans.V[i]+=V[i]+od.V[i];
ans.V[i+]+=ans.V[i]/mod;
ans.V[i]%=mod;
}
ans.len=L;
while(ans.V[ans.len]>){
ans.V[ans.len+]+=ans.V[ans.len]/mod;
ans.V[ans.len]%=mod;
ans.len++;
}
return ans;
}
void print(){
printf("%d",V[len-]);
for(int i=len-; i>=; --i){
printf("%08d",V[i]);
}
// printf("\n");
}
}F[];
ll dp[];
ll f[];
int main()
{
Bignumber t;
t.V[]=;
t.len=;
F[].clear();
int num=,loc=;
while(loc<=){
for(int i=; i<num&&loc<=; ++i){
F[loc]=F[loc-]+t; loc++;
}
num++;
t=t*;
// t.print(); printf("\n");
}
int n;
while(scanf("%d",&n)==){
F[n].print();
printf("\n");
}
return ;
}

uva 10254的更多相关文章

  1. UVA 10254 十八 The Priest Mathematician

    The Priest Mathematician Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu ...

  2. 递推+高精度+找规律 UVA 10254 The Priest Mathematician

    题目传送门 /* 题意:汉诺塔问题变形,多了第四个盘子可以放前k个塔,然后n-k个是经典的汉诺塔问题,问最少操作次数 递推+高精度+找规律:f[k]表示前k放在第四个盘子,g[n-k]表示经典三个盘子 ...

  3. UVA 10254 - The Priest Mathematician (dp | 汉诺塔 | 找规律 | 大数)

    本文出自   http://blog.csdn.net/shuangde800 题目点击打开链接 题意: 汉诺塔游戏请看 百度百科 正常的汉诺塔游戏是只有3个柱子,并且如果有n个圆盘,至少需要2^n- ...

  4. uva 1354 Mobile Computing ——yhx

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAABGcAAANuCAYAAAC7f2QuAAAgAElEQVR4nOy9XUhjWbo3vu72RRgkF5

  5. UVA 10564 Paths through the Hourglass[DP 打印]

    UVA - 10564 Paths through the Hourglass 题意: 要求从第一层走到最下面一层,只能往左下或右下走 问有多少条路径之和刚好等于S? 如果有的话,输出字典序最小的路径 ...

  6. UVA 11404 Palindromic Subsequence[DP LCS 打印]

    UVA - 11404 Palindromic Subsequence 题意:一个字符串,删去0个或多个字符,输出字典序最小且最长的回文字符串 不要求路径区间DP都可以做 然而要字典序最小 倒过来求L ...

  7. UVA&&POJ离散概率与数学期望入门练习[4]

    POJ3869 Headshot 题意:给出左轮手枪的子弹序列,打了一枪没子弹,要使下一枪也没子弹概率最大应该rotate还是shoot 条件概率,|00|/(|00|+|01|)和|0|/n谁大的问 ...

  8. UVA计数方法练习[3]

    UVA - 11538 Chess Queen 题意:n*m放置两个互相攻击的后的方案数 分开讨论行 列 两条对角线 一个求和式 可以化简后计算 // // main.cpp // uva11538 ...

  9. UVA数学入门训练Round1[6]

    UVA - 11388 GCD LCM 题意:输入g和l,找到a和b,gcd(a,b)=g,lacm(a,b)=l,a<b且a最小 g不能整除l时无解,否则一定g,l最小 #include &l ...

随机推荐

  1. python2.0_s12_day9_事件驱动编程&异步IO

    论事件驱动与异步IO 事件驱动编程是一种编程范式,这里程序的执行流由外部事件来决定.它的特点是包含一个事件循环,当外部事件发生时使用回调机制来触发相应的处理.另外两种常见的编程范式是(单线程)同步以及 ...

  2. Size Balanced Tree

    Size Balanced Tree(SBT)是目前速度最快的平衡二叉搜索树,且能够进行多种搜索操作,区间操作:和AVL.红黑树.伸展树.Treap类似,SBT也是通过对节点的旋转来维持树的平衡,而相 ...

  3. 【PHP】php 生成条形码

    1.什么是条形码? 百度百科定义:条形码(barcode)是将宽度不等的多个黑条和空白,按照一定的编码规则排列,用以表达一组信息的图形标识符.常见的条形码是由反射率相差很大的黑条(简称条)和白条(简称 ...

  4. JS-获取class类名为某个的元素-【getClass】函数封装

    原理: /*  * 根据class获取元素. * 原理是,取出oparent下的所有元素,组成数组,然后遍历类名,全等判断.*/ 源码 1 function getClass(oParent,clsN ...

  5. LeetCode——Find Minimum in Rotated Sorted Array

    Description: Suppose a sorted array is rotated at some pivot unknown to you beforehand. (i.e., 0 1 2 ...

  6. codeforce 148D. Bag of mice[概率dp]

    D. Bag of mice time limit per test 2 seconds memory limit per test 256 megabytes input standard inpu ...

  7. 【黑金ZYNQ7000系列原创视频教程】06.ZYNQ来自FPGA的中断——按键中断实验

    黑金论坛地址: http://www.heijin.org/forum.php?mod=viewthread&tid=36640&extra=page%3D1 爱奇艺地址: http: ...

  8. MySQL 5.6 my.cnf 参数说明(转)

    # 以下选项会被MySQL客户端应用读取. # 注意只有MySQL附带的客户端应用程序保证可以读取这段内容. # 如果你想你自己的MySQL应用程序获取这些值. # 需要在MySQL客户端库初始化的时 ...

  9. [Gradle] 查看项目依赖

    查看项目的编译依赖 $ ./gradlew :app:dependencies --configuration compile 查看具体某个库的依赖 $ ./gradlew -q :app:depen ...

  10. MyBatis DAO层传递参数到mapping.xml 几种方式

    Dao层传递参数到mapping.xml文件的几种方式:(Mybatis传值总结) 第一种:传递单个参数 Dao层Code片段: /** * 根据articleId查询XXXX详情. * * @par ...