FZU

来源:互联网 发布:淘宝中的查询热度 编辑:程序博客网 时间:2024/06/03 14:23

 Problem 1036 四塔问题

Accept: 612    Submit: 1585
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


找规律

0个时为0

然后按 +1 +2 +2 +4 +4 +4 +8 +8 +8 +8 +16....的顺序来

这规律真难找,碰到两次都写不出生气


#include<iostream>#include<stdio.h>#include<string.h>using namespace std;const int N = 5e4 +10;const int mod = 1e4;int n,f[N] = {0},add = 1,cnt = 1;int main(){    for(int i=1;i<N;i+=cnt++){        for(int j=0;j<cnt&&i+j<N;j++){            f[i+j] = (f[i+j-1] + add) % mod;        }        add = (add<<1) % mod;    }    while(scanf("%d",&n)!=EOF){        printf("%d\n",f[n]);    }    return 0;}

原创粉丝点击