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 }
  • 相关阅读:
    YXY-压测
    禅道使用
    抓https包
    数据库基本查询语句
    限制网速 制造测试条件
    测试中认识 sqlite
    Adb 命令
    jmeter 查看提取的参数
    jmeter传入字符时文本显示乱码
    nginx 访问springboot项目
  • 原文地址:https://www.cnblogs.com/konjak/p/6018633.html
Copyright © 2011-2022 走看看