BZOJ1566: [NOI2009]管道取珠

10人阅读 评论(0) 收藏 举报
分类:

题目描述: 传送门

题解:

这题要求的是ai^2,我们难以直接写DP硬求,此时就要思考一些奇伎淫巧了。
我们注意到,ai^2就是ai*ai,如果我们同时进行两场游戏,两边相同时相加,最后不就是ai^2了吗?
所以我们可以定义f[i][j][k][t] 表示第一局第一个管取到第i个,第二个管取到第j个;第二局第一个管取到第k个,第二个管取到第t个。但是这样还会超时。我们注意到i+j等于k+t,那么我们就可以省去t这一维,表示为f[i][j][k]了。

代码如下:

#include<cstdio>
#include<string>
using namespace std;
const int maxn=505,tt=1024523;
int n,m,len1,len2,a[maxn],b[maxn],f[maxn][maxn][maxn];
int main(){
    scanf("%d %d",&n,&m);
    char ch=getchar();
    while (ch!='A'&&ch!='B') ch=getchar();
    while (ch=='A'||ch=='B') a[++len1]=ch-'A'+1,ch=getchar();
    ch=getchar();
    while (ch!='A'&&ch!='B') ch=getchar();
    while (ch=='A'||ch=='B') b[++len2]=ch-'A'+1,ch=getchar();
    f[0][0][0]=1;
    for (int i=0;i<=n;i++)
    for (int j=0;j<=m;j++)
    for (int k=0;k<=min(i+j,n);k++){
        int t=i+j-k;
        if (i&&k&&a[i]==a[k]) f[i][j][k]=(f[i][j][k]+f[i-1][j][k-1])%tt;
        if (i&&t&&a[i]==b[t]) f[i][j][k]=(f[i][j][k]+f[i-1][j][k])%tt;
        if (j&&k&&b[j]==a[k]) f[i][j][k]=(f[i][j][k]+f[i][j-1][k-1])%tt;
        if (j&&t&&b[j]==b[t]) f[i][j][k]=(f[i][j][k]+f[i][j-1][k])%tt;
    }
    printf("%d\n",f[n][m][n]);
    return 0;
}
查看评论

【bzoj1566】【NOI2009】【管道取珠】【dp】

Description   Input 第一行包含两个整数n, m,分别表示上下两个管道中球的数目。 第二行为一个AB字符串,长度为n,表示上管道中从左到右球的类型。其中A表示浅色球,B表示深色...
  • sunshinezff
  • sunshinezff
  • 2016-07-14 20:49:06
  • 1142

[NOI2009]管道取珠

[NOI2009]管道取珠 Time Limit: 20 Sec  Memory Limit: 650 MB Description   Input 第一行包含两个整数n, m,...
  • yhb1216776494
  • yhb1216776494
  • 2013-06-29 15:11:59
  • 925

[NOI2009]管道取珠 解题报告

这题好神啊。。 如果直接dp的话,有一个重复计算的问题很难避免。 所以这题有一个非常神的转化是可以看作是两个人在取,等于两个人取的相等方案的乘积。这样的话,做到最后当然是等于∑ki=1a2i\su...
  • TA201314
  • TA201314
  • 2016-07-13 19:14:35
  • 885

[BZOJ 1056][NOI 2009]管道取珠(DP)

题目链接http://www.lydsy.com/JudgeOnline/problem.php?id=1566思路设上面的珠子序列是U,下面的是L,定义一个取珠子的操作序列的状态(i,j)表示上面的...
  • qpswwww
  • qpswwww
  • 2015-03-04 20:41:26
  • 802

BZOJ 1566: [NOI2009]管道取珠 另类DP

题目:戳这里 题解:比较神的想法,因为最后答案是所有数的平方,那么我们就可以将问题转化一下,变成俩个人取数,两人拿出的结果相同的方案书目,YY一下就能证明这个转化的正确性,这就很好办了,瞎DP一下就...
  • LZJ209
  • LZJ209
  • 2017-06-23 20:48:12
  • 198

bzoj1566: [NOI2009]管道取珠

传送门 两次取的序列一样,可以看成两个人分别玩一次,然后两个人得到的序列一样. 那这个题就变成了两个人各玩一次,求第一个人每次得到的序列在第二个人得到的序列中出现的次数和. 设f[i][j][...
  • zhouyuyang233
  • zhouyuyang233
  • 2017-05-05 16:00:53
  • 175

[bzoj1566][NOI2009]管道取珠

1566: [NOI2009]管道取珠Time Limit: 20 Sec Memory Limit: 650 MB Submit: 1277 Solved: 721 [Submit][Sta...
  • FZHvampire
  • FZHvampire
  • 2016-07-04 11:35:03
  • 370

bzoj1566 [NOI2009]管道取珠

智商DP
  • u010336344
  • u010336344
  • 2017-04-01 11:32:02
  • 260

[BZOJ1566][NOI2009]管道取珠

一道有点考思维的DP抛一个题目连接BZOJ1566管道取珠 这题·······可能会想到数论,发现求不出来于是想DP。分析:设操作方案为k,现有一种输出方案,操作数为ai,令q=ai; 那么对应的...
  • Izumi_Hanako
  • Izumi_Hanako
  • 2017-07-06 09:05:26
  • 182

bzoj1566: [NOI2009]管道取珠 dp

很容易想到思维的dp 然后和往常一样发现第四维可以由第三维决定。 然后,就没有然后了。三维分别表示a管取了i个 b管取了j个 和另一种方案里a管取了c个#include #include #in...
  • IED98
  • IED98
  • 2015-03-20 10:00:26
  • 1113
    个人资料
    持之以恒
    等级:
    访问量: 3773
    积分: 798
    排名: 6万+
    友情链接
    NOIP2017AK:

    LINK TO WT
    LINK TO CHJ
    LINK TO XCW