【UVA】620-Cellular Structure(递推)

读错题了一开始。

一个细胞每次可以进行3中增值方式,给你一个最终形态,问你达到这个形态之前的那个到这个最终形态是通过哪一种方式得到的。

直接递推就可以了,小优化就是如果这个字符串长度为偶数,那么肯定发生了变异。

14144659 620 Cellular Structure Accepted C++ 0.009 2014-09-04 07:31:52

#include<cstdio>
#include<algorithm>
#include<string>
#include<cstring>
#include<map>
#include<iostream>
using namespace std;
#define MAXD 10000 + 10
char str[MAXD];
int dfs(int start , int last){
    if(start == last && str[start] == 'A')
        return 1;
    if(last - 2 >= start && str[last] == 'B' && str[last - 1] == 'A' && dfs(start,last - 2))
        return 2;
    if((last - 1 >= start + 1) && str[start] == 'B' && str[last] == 'A' && dfs(start + 1 , last - 1))
        return 3;
    return 0;
}
int main(){
    int T;
    scanf("%d",&T);
    while(T--){
        scanf("%s",str);
        int L = strlen(str);
        if(L != 1 && !(L & 1))
            printf("MUTANT\n");
        else{
        switch(dfs(0,L - 1)){
            case 1 : printf("SIMPLE\n");       break;
            case 2 : printf("FULLY-GROWN\n"); break;
            case 3 : printf("MUTAGENIC\n");    break;
            case 0 : printf("MUTANT\n");       break;
        }
        }
    }
    return 0;
}
时间: 2024-11-06 18:27:26

【UVA】620-Cellular Structure(递推)的相关文章

UVa 620 Cellular Structure(DP)

题意  有A,B两种细胞  A细胞可由空生成  非空细胞链有两种增长方式  设O为原非空细胞链  则O可增长为OAB或BOA  给你一个细胞链  若其是合法分裂的  要求推断最后一次分裂是哪种方式  无法得到的输出MUTANT 若给定的S是以AB结尾的   推断去掉AB的部分是否合法就可以  若S是B開始A结束的   推断去掉首尾是否合法就可以. #include <cstdio> #include <cstring> char s[10000]; bool dp(int i, i

uva 1478 - Delta Wave(递推+大数+卡特兰数+组合数学)

题目链接:uva 1478 - Delta Wave 题目大意:对于每个位置来说,可以向上,水平,向下,坐标不能位负,每次上下移动最多为1, 给定n问说有多少种不同的图.结果对10100取模. 解题思路:因为最后都要落回y=0的位置,所以上升的次数和下降的次数是相同的,并且上升下降的关系满足出栈入栈的关系.即卡特兰数. 所以每次枚举i,表示有i个上升,i个下降,用组合数学枚举出位置,然后累加求和. C(2?in)?f(i)=C(2?i?2n)?f(i?1)?(n?2?i+1)?(n?2?i+2)

【UVA】12034-Race(递推,组合数打表)

递推公式,假设第一名有i个人并列,那么: f[n] = C(n,i) * f[n - i]; 打出1 ~ 1000的所有组合数,之后记忆化搜索,需要打表. 14026995 12034 Race Accepted C++ 0.032 2014-08-12 11:47:47 #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #include<vector&g

uva 1485 - Permutation Counting(递推)

题目链接:uva 1485 - Permutation Counting 题目大意:给定n和k,要求求一个由1~n组成的序列,要求满足ai>i的i刚好有k个的序列种数. 解题思路:dp[j][i]表示长度为i,j个位置满足的情况. dp[j+1][i]+=dp[j][i]?(j+1); 1, (3), (4), 2: 括号位置代表ai>i,既满足位置,此时i = 4, j = 2. -> 1, (3), (4), 2, 5 1 种,在最后追加 -> 1, (5), (4), 2,

UVA - 10003Cutting Sticks(递推)

题目:UVA - 10003Cutting Sticks(递推) 题目大意:给根木棍长度l,现在要锯这根木棍,给出n个锯点,求怎样锯才能使得开销最小.例如 长度为10的木棍, 锯点2 4 7,那么如果按照这个顺序 , 首先显示由长度位10的木头先锯了2 ,开销就加10,然后锯完现在有[0,2]和[2,10]长度分别为2 ,8的木棍,现在要在4这个位置锯木头,就是在长度为8的木头上锯4这个位置,这样就加上8,然后又有长度为[2,4][4,10]的木头,最后要锯7的话,就需要开销加上6.所以开销就是

UVA 11021 - Tribles(概率递推)

UVA 11021 - Tribles 题目链接 题意:k个毛球,每个毛球死后会产生i个毛球的概率为pi,问m天后,所有毛球都死亡的概率 思路:f[i]为一个毛球第i天死亡的概率,那么 f(i)=p0+p1f(i?1)+p2f(i?1)2+...+pnf(i?1)n 然后k个毛球利用乘法定理,答案为f(m)k 代码: #include <stdio.h> #include <string.h> #include <math.h> const int N = 1005;

UVA 10288 - Coupons(概率递推)

UVA 10288 - Coupons 题目链接 题意:n个张票,每张票取到概率等价,问连续取一定次数后,拥有所有的票的期望 思路:递推,f[i]表示还差i张票的时候期望,那么递推式为 f(i)=f(i)?(n?i)/n+f(i?1)?i/n+1 化简后递推即可,输出要输出分数比较麻烦 代码: #include <cstdio> #include <cstring> #include <cmath> long long gcd(long long a, long lon

UVA 1350 - Pinary(数论+递推)

题目链接:1350 - Pinary 题意:二进制数,不能有连续的1,给定第n个数字,输出相应的二进制数 思路:先是递推,求出由n位组成的数字中有几个满足条件 dp[i] = dp[i - 1] + dp[i - 2],考虑最后一位放0和倒1位放0的情况. 然后用一个sum[i]记录满足<=i位一共的情况 接着利用二分找到给定的n > sum[i - 1],i的最大值,这个就是所求的答案的最高位. 因为如果这位放1,那么就会一共多sum[i - 1] + 1个数,那么就还需要添加n - (su

uva 1073 - Glenbow Museum(递推)

cocos2d-x升级到3.0后变化不小,除了API的变化(主要是函数和类名称变化,以及使用了C++11的不少特性,function/bind, lamda, std::thread-),创建和编译工程也做了一些简化调整.本文主要讨论一下cocos2d-x3.0 在android平台开发的环境设置及工程创建编译流程. 1.   初始设置 除了2.x所需要的python,jdk, android sdk和ndk之外,还需要部署apache-ant. 1)      在path中设置好java环境变

UVA - 10051Tower of Cubes(递推)

题目: UVA - 10051Tower of Cubes(递推) 题目大意:给出N个正方体1-N,只有序号小的正方体可以放在序号大的正方体的上面,并且除了最底下的那个正方体,其他的正方体的底面要和它下面的正方体的上面颜色相同.问怎样组合才能使得用的正方体个数越多.并且输出其中的一种堆放方式. 解题思路:一开始觉得是用DAG上的DP来做,结果状态开太多dp[N][N][M](N代表正方体个数, M代表六个面),最后输出路径的时候超时了.后面看了别人的题解,发现状态只需要开dp[N][M]就足够了