zoukankan      html  css  js  c++  java
  • uva 10795 A Different Task

    汉诺塔问题:

    首先得记住一个经典的结论:把i个盘子移动到另外一个柱子上要花2^i-1步

    然后这个题:

    首先从底往上找到要移动的编号最大的盘子,把上面所有的移动在临时的柱子,然后把那个编号最大的移动到目标状态,

    最后把前面移到临时柱子上的移到目标状态(循环递归);

    利用前面的那个结论递归就可以了!

    代码:

     1 #include<cstdio>
     2 #define maxn 66
     3 #define ll long long
     4 using namespace std;
     5 
     6 ll f(int *p,int i,int final)
     7 {
     8     if(i==0)return 0;
     9     if(p[i]==final)return f(p,i-1,final);
    10     return f(p,i-1,6-p[i]-final)+(1ll<<i-1);
    11 }
    12 
    13 int n,s[maxn],l[maxn];
    14 
    15 int main()
    16 {
    17     int ca=1;
    18     while(scanf("%d",&n)&&n)
    19     {
    20         for(int i=1;i<=n;i++)scanf("%d",&s[i]);
    21         for(int i=1;i<=n;i++)scanf("%d",&l[i]);
    22         int k=n;
    23         while(k>=1&&s[k]==l[k])k--;
    24         ll ans=0;
    25         if(k>=1)
    26         {
    27             int ot=6-s[k]-l[k];
    28             ans=f(s,k-1,ot)+f(l,k-1,ot)+1;
    29         }
    30         printf("Case %d: %lld
    ",ca++,ans);
    31     }
    32     return 0;
    33 }
    View Code
  • 相关阅读:
    中芯国际唐镇生活园区二期奠基 助力员工安居乐业
    权限管理架构
    不登录电脑启动程序
    Nagios 系统监控
    JieBaNet+Lucene.Net
    FontAwesome 图标
    Net多线程编程
    Scala Control Structures
    OAuthLogin2.0
    Telnet服务器和客户端请求处理
  • 原文地址:https://www.cnblogs.com/yours1103/p/3393189.html
Copyright © 2011-2022 走看看