Codeforces Round #439 (Div. 2) C. The Intriguing Obsession(dp)

来源:互联网 发布:linux中mysql忘记密码 编辑:程序博客网 时间:2024/06/06 00:17

虽然看懂题目也不一定能做出来,但是真的没看懂题目的要求。。样例都算不出来。。
参考题解:http://blog.csdn.net/mungbeanwithredface/article/details/78170091

将a,b,c三种颜色分为三部分,ab,ac,bc,三部分,每部分的方案单独算,然后乘起来就是结果。假设a和b颜色的连接,a中的每个球,只能连接b中的一个球,或者不连。是因为相同颜色的岛之间的最短距离为3,或者无法到达。
dp[i][j]表示a有i个岛,b有j个岛的时候的方案,如果第j个选则不连,那就是dp[i][j-1],如果第j个选择连,则有i种选择,就是i*dp[i-1][j-1],所以dp[i][j] = dp[i][j-1]+i*dp[i-1][j-1]。

#include <bits/stdc++.h>using namespace std;const int mod = 998244353;const int MAXN = 5005;long long G[MAXN][MAXN];int main(){    int a,b,c;    scanf("%d %d %d",&a,&b,&c);    for(int i = 0; i < MAXN; ++i) G[0][i] = 1;    for(int i = 1; i < MAXN; ++i)    {        G[i][0] = 1;        for(int j = 1; j < MAXN; ++j)            G[i][j] = (G[i][j-1] + i*G[i-1][j-1])%mod;    }    printf("%I64d\n",(G[a][b]*G[a][c]%mod)*G[b][c]%mod);    return 0;}
阅读全文
0 0
原创粉丝点击