FZU 2170 花生的序列

动态规划,转移方程为 dp[i][j] = (dp[i-1][j]+dp[i][j-1])%MOD,定义还是比较裸的,讨论一下就可以了

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
#define MOD 1000000007
int dp[3010],v[3010];
char str[6010];
int main()
{

    int t,i,j;
    int n;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d",&n);
        scanf("%s",str+1);
        dp[0] = 1;
        v[0] = 1;
        for(i=0; i<=n; i++)
            for (j=0; j<=n; j++)
            {
                if(i==0 && j==0) continue;
                int sum = 0;
                if(str[i+j] == ‘W‘)
                {
                    if(i&1)
                        sum = (sum+v[j]) % MOD;
                    if(j&1)
                        sum = (sum+dp[j-1]) % MOD;

                    v[j] = dp[j] = sum % MOD;
                }
                else
                {
                    if(i>0 && (i&1)==0)
                        sum = (sum+v[j]) % MOD;
                    if(j>0 && (j&1)==0)
                        sum = (sum + dp[j-1]) % MOD;

                    v[j] = dp[j] = sum % MOD;
                }
            }
        printf("%d\n",dp[n]);
    }
    return 0;
}
时间: 2024-10-29 10:46:25

FZU 2170 花生的序列的相关文章

fzoj 2170 花生的序列

 Problem 2170 花生的序列 Accept: 41    Submit: 127 Time Limit: 3000 mSec    Memory Limit : 32768 KB  Problem Description "我需要一个案件!!!",没有案件卷福快疯了.花生不忍心看卷福这个样子,他决定帮卷福找点事情做. 花生拿了两个长度为N的相同的序列,序列都为WB(WBWBWB...)相间,并且由W开头.他将两个序列并在了一起,其中属于同个序列的元素相对位置不变.花生高兴的把

FOJ 2170 花生的序列 dp

marketplace是Eclipse发布的一个类似AppStore一样的插件和应用平台,可以从中安装Eclipse插件等.有些旧版本的Eclipse没有安装marketpalace. 一.   marketplace的安装 打开 Eclipse,菜单栏 Help -- Install New Software,弹出 install 窗口,在 Work with 中输入 http://download.eclipse.org/releases/indigo,等待获取插件内容.然后找到 然后 Ne

2014 Super Training #10 D 花生的序列 --DP

原题: FZU 2170 http://acm.fzu.edu.cn/problem.php?pid=2170 这题确实是当时没读懂题目,连样例都没想通,所以没做了,所以还是感觉这样散漫的做不好,有些题目明明很简单,却因为没看懂而放弃了,甚至去玩了,这样达不到太大的效果. 解法: 定义: dp[i][j]:前i个字母中有j个是属于第一个序列的标号方案种数. 则当遇到'B'时,因为要满足WB依次间歇出现,所以前面属于第一个序列的个数应该为奇数,即j&1时转移.当属于第二个序列的个数为奇数时((i-

福州大学第十一届程序设计竞赛

Problem 2167 大王叫我来巡山呐 Problem 2168 防守阵地 I 直接前缀和预处理 Problem 2169 shadow  .. Problem 2170 花生的序列 dp Problem 2171 防守阵地 II 线段树搞搞 Problem 2172 巡了南山我巡北山 http://blog.csdn.net/my_acm_dream/article/details/44507371 好题 Problem 2173 Nostop 矩阵高速幂 Problem 2174 卷福的

iOS MapKit导航及地理转码辅助类

Problem 2167 大王叫我来巡山呐 做的的第二题 呵呵 Problem 2168 防守阵地 I 做的第一题 打了下草稿 马上切了它 假设当前x=(ai)*1+(ai+1)*2+(ai+2)*3+''''+(aj)*m 下一次是(ai+1)*1+(ai+2)*2+(ai+3)*3+''''+(aj+1)*m = (ai)*1+(ai+1)*2+(ai+2)*3+''''+(aj)*m+(aj+1)*(m+1) -(ai+(ai+1)+(ai+2)+'''+(aj)+(aj+1)) 紫色的这

Android应用基础学习记录

福州大学第十一届程序设计竞赛 Contest Finished! Tag Pro.ID Problem Title Ratio(AC/Submit) 1 大王叫我来巡山呐 80.31%(261/325) 2 防守阵地 I 23.48%(193/822) 3 shadow 13.23%(97/733) 4 花生的序列 12.07%(21/174) 5 防守阵地 II 14.98%(68/454)   6 巡了南山我巡北山 0.00%(0/45) 7 Nostop 20.79%(21/101)  

FZU 2105 Digits Count(按位维护线段树)

[题目链接] http://acm.fzu.edu.cn/problem.php?pid=2105 [题目大意] 给出一个序列,数字均小于16,为正数,每次区间操作可以使得 1. [l,r]区间and一个数 2. [l,r]区间or一个数 3. [l,r]区间xor一个数 4. [l,r]区间查询和 操作数均为小于16的非负整数 [题解] 由于操作数很小,因此我们可以按位维护四棵线段树,表示二进制中的第i位, 对于and操作,只有当and的当前位为0时才对区间有影响,效果是将区间全部变为0, 对

HDU 2276 &amp; FZU 1692 (循环同构优化+矩阵快速幂)

HDU 2276 题意: 给定一个01**字符串环**(2<=字符串长度<=100)然后进行m次的变换. 定义变换的规则为:如果当前位置i的左边是1(下标为0的左边是n-1),那么i就要改变状态0->1 , 1->0 比如当前的状态为100101那么一秒过后的状态为010111. 思路: 用公式表示变化状态其实就是: ai=(a(i+n?1)%n+ai)%2 换成位操作就是: ai=a(i+n?1)%n^ ai 于是我们可以建立一个变化矩阵: ??????????1100...00

贪心 FZU 2013 A short problem

题目传送门 1 /* 2 题意:取长度不小于m的序列使得和最大 3 贪心:先来一个前缀和,只要长度不小于m,从m开始,更新起点k最小值和ans最大值 4 */ 5 #include <cstdio> 6 #include <algorithm> 7 using namespace std; 8 9 const int MAXN = 1e6 + 10; 10 const int INF = 0x3f3f3f3f; 11 int a[MAXN], sum[MAXN]; 12 13 in