zoukankan      html  css  js  c++  java
  • 【uva 12627】Erratic Expansion(算法效率--递推)

    题意:初始1个红气球,每小时后,1个红气球会变成3个红气球和1个蓝气球,而1个蓝气球会变成4个蓝气球。问经过N小时后,第L~R行一共有多少个红气球。

    解法:问行数就定义f[i][j]表示 i 小时后前 j 行的红气球数。分情况讨论后就可得出递推方程。

    注意——1.数组开不小就时间换空间,递归替代递推求解;2.要另外定义一个c函数,c(i)表示f[i][1<<i],否则每次都至少要算2^i,会TLE。

     1 #include<cstdio>
     2 #include<cstdlib>
     3 #include<cstring>
     4 #include<algorithm>
     5 #include<iostream>
     6 #include<queue>
     7 using namespace std;
     8 const int N=30;
     9 typedef long long LL;
    10 
    11 LL c(int i) {return i?3*c(i-1):1;}
    12 LL f(int i,int j)
    13 {
    14     if (!j) return 0;
    15     if (!i) return 1;
    16     if (i==1) return (j==1)?2:3;
    17     int k=1<<(i-1);
    18     if (j<=k) return 2*f(i-1,j);
    19     return 2*c(i-1)+f(i-1,j-k);
    20 }
    21 int main()
    22 {
    23     int T;
    24     scanf("%d",&T);
    25     for (int kase=1;kase<=T;kase++)
    26     {
    27       int n,l,r;
    28       scanf("%d%d%d",&n,&l,&r);
    29       printf("Case %d: %lld
    ",kase,f(n,r)-f(n,l-1));
    30     }
    31     return 0;
    32 }
  • 相关阅读:
    win10家庭版转专业版并激活
    关于vcruntime140D.dll丢失问题
    phpMyAdmin使用教程
    在wamp中直接进入项目
    sublime Text3的使用
    wamp的安装配置
    PHP Web开发入门流程
    PHP与MySQL的亲密接触
    flex 布局 实现电商页面商品展示floor
    html css+div+jquery实现图片轮播
  • 原文地址:https://www.cnblogs.com/konjak/p/6018633.html
Copyright © 2011-2022 走看看