Problem 1036 四塔问题

Accept: 590    Submit: 1506
Time Limit: 1000 mSec    Memory Limit : 32768 KB

 Problem Description

“汉诺塔”,是一个众所周知的古老游戏。现在我们把问题稍微改变一下:如果一共有4根柱子,而不是3根,那么至少需要移动盘子多少次,才能把所有的盘子从第1根柱子移动到第4根柱子上呢?

为了编程方便,您只需要输出这个结果mod 10000的值。

 Input

该题含有多组测试数据,每组一个正整数n。(0<n<=50000)

 Output

一个正整数,表示把n个盘子从第1根柱子移动到第4根柱子需要的最少移动次数mod 10000的值。

 Sample Input

15

 Sample Output

129

做法:找规律

#include<iostream>
using namespace std;
int main()
{
    int n;
    while(cin>>n && n!=0)
    {
        int f[50001]={0};  //不能用int f[n+1];
        int p = 1;
        int q = p;
        int k = 1;
        for(int i = 1; i <= n; i++)
        {
            f[i] = (f[i-1] + k) % 10000;
            q--;
            if(q==0)
           {
               p++;
               q = p;
               k *= 2;
               k %= 10000;
            }
         }
        cout<<f[n]<<endl;
    }
    return 0;
}  
时间: 2024-10-13 16:32:57

Problem 1036 四塔问题的相关文章

FZOJ 1036 四塔问题(找规律)

OJ题目:click here~~ 题目分析:四塔问题,n个盘,从塔1,到塔4,至少需要多少步. 这里n的范围是( 0  ,  50000 ] ,所以不能直接用四塔算法.这里找规律就可以了. AC_CODE const int mod = 10000; const int Max_N = 50002; int dp[Max_N]; int main() { int i , j = 0, k = 2, t = 2; dp[1] = 1; for(i = 2;i <= Max_N-2;i++){ j

poj1958-汉诺四塔问题(三种方法)

链接:http://poj.org/problem?id=1958 大意:汉诺塔升级版,四根柱子,n个盘子,求最少移动次数: 两种方法 递推or递归(当然还有思路3--打表) 思路1:递推(或者DP?) 把四塔转换为三塔进行思考 假设当前要移动n个盘子,那么就不如分为以下几步 先将上面的i个盘子移到第2或3个塔上:(四塔移动) 再把剩下的(n-i)个盘子移到最后一个塔上(三塔移动): 最后把在那i个盘子移到最后一个塔上(注意:是四塔移动,i个盘子一定比后来的(n-i)个盘子小) 得到方程:f[n

POJ 1958 Strange Towers of Hanoi (四塔问题,线性dp,记忆化搜索)

题目分析:四柱汉诺塔.由于题目已经给出了求解方法,直接写代码即可.下面总结一下,四塔问题. 感谢这篇文章的作者,点这里就到,总结的很好.直接贴过来~ 四塔问题:设有A,B,C,D四个柱子(有时称塔),在A柱上有由小到大堆放的n个盘子. 今将A柱上的盘子移动到D柱上去.可以利用B,C柱作为工作栈用,移动的规则如下: ①每次只能移动一个盘子. ②在移动的过程中,小盘子只能放到大盘子的上面. 设计并实现一个求解四塔问题的动态规划算法,并分析时间和空间复杂性. 算法思想: 用如下算法移动盘子(记为Fou

BZOJ 题目1036: [ZJOI2008]树的统计Count(Link Cut Tree,修改点权求两个最大值和最大值)

1036: [ZJOI2008]树的统计Count Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 8421  Solved: 3439 [Submit][Status][Discuss] Description 一棵树上有n个节点,编号分别为1到n,每个节点都有一个权值w.我们将以下面的形式来要求你对这棵树完成一些操作: I. CHANGE u t : 把结点u的权值改为t II. QMAX u v: 询问从点u到点v的路径上的节点的最大权值

CODEVS——T 1036 商务旅行

http://codevs.cn/problem/1036/ 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 题目描述 Description 某首都城市的商人要经常到各城镇去做生意,他们按自己的路线去做,目的是为了更好的节约时间. 假设有N个城镇,首都编号为1,商人从首都出发,其他各城镇之间都有道路连接,任意两个城镇之间如果有直连道路,在他们之间行驶需要花费单位时间.该国公路网络发达,从首都出发能到达任意一个城镇,并且公路网络不会存在环. 你的任务

bzoj 1036: [ZJOI2008]树的统计Count (树链剖分)

ps:这道题过的人真多啊 一道树剖的模板题 (好像还可以用lct做, 然而我并不会 代码如下 1 /************************************************************** 2 Problem: 1036 3 User: cminus 4 Language: C++ 5 Result: Accepted 6 Time:2380 ms 7 Memory:4052 kb 8 *************************************

【BZOJ 1036】【ZJOI 2008】树的统计

此题为树链剖分的裸题. 代码如下,使用常用的轻重链剖分. /************************************************************** Problem: 1036 User: Evensgn Language: C++ Result: Accepted Time:2468 ms Memory:5772 kb ****************************************************************/ #inc

lightoj 1036 - A Refining Company(简单dp)

题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1036 题解:设dp[i][j]表示处理到(i,j)点时的最大值然后转移显然是 dp[i][j] = max(dp[i - 1][j] + asum[i][j] , dp[i][j - 1] + bsum[i][j]); 要么取一整列要么取一整行. #include <iostream> #include <cstring> #include <cstdio

【hihoCoder】1036 Trie图

题目:http://hihocoder.com/problemset/problem/1036 给一个词典dict,词典中包含了一些单词words.要求判断给定的一个文本串text中是否包含这个字典中的单词words. 相关基础的理解 1. 与用KMP解决的问题的差别 KMP:输入原串S和一个模式串T,判断T是否出现在S中.通过对T计算next数组,避免原串S的回溯. 现在的问题:输入文本串text和多个单词words,判断words中是否有出现在text中.同样希望输入的text不用进行回溯.