zoukankan      html  css  js  c++  java
  • ZOJ 4114 dp

    ZOJ 4114

    帕斯卡公式等组合数相关知识

    题意:给n个灯泡,让进行r轮操作,每次操作选择m个灯泡,将灯泡开关状态改变,给开始n个灯泡的状态和结束时的状态,问有多少种方案使灯泡从开始状态变为结束状态。

    思路:算是个牛逼题把,因为题目给定了灯泡初末状态,一开始我们可以得到到结束有多少个灯泡对应位置状态发生了改变,我们只需要在r轮操作中消除这些改变即可,设f[i][j]表示第i轮有j个灯泡的状态和结束状态的灯泡不一样的方案数,一开始预处理f[0][dif]=1,表示一开始有dif个灯泡与末状态不同.f[i][j]为第i轮有j个灯泡不同,我们可以从j里选k个灯泡改变组合方案为c[j][k],n-j为相同的灯泡,因为必须操作m次,所以我们要从n-j个灯泡中再选择m-k个灯泡改变组合方案为c[n-j][m-k],得转移方程:f[i][j-k+m-k]+=f[i-1][j]*c[j][k]*c[n-j][m-k]。

     

    #include<bits/stdc++.h>
    using namespace std;
    
    const int mod=998244353;
    #define ll long long
    ll c[105][105];
    char a[105],b[105];
    ll f[105][105];
    int main()
    {
        int t;
        scanf("%d",&t);
        for(int i=0;i<=100;i++)
            c[i][0]=c[i][i]=1;
        for(int i=2; i<=100; i++)
            for(int j=1; j<i; j++)
                c[i][j]=(c[i-1][j-1]+c[i-1][j])%mod;
        while(t--)
        {
            ll n,r,m;
            scanf("%lld%lld%lld%s%s",&n,&r,&m,a+1,b+1);
            memset(f,0,sizeof(f));
            int dif=0;
            for(int i=1; i<=n; i++)
                if(a[i]!=b[i])
                    dif++;
            int now=0;
            f[now][dif]=1;
            for(int i=1; i<=r; i++)
            {
                now=i%2;
                for(int j=0; j<=n; j++)
                    f[now][j]=0;
                for(int j=0; j<=n; j++)
                    for(int k=0; k<=m; k++)
                    {
                        if(k<=j&&m-k<=n-j)
                            f[now][j-k+m-k]=(f[now][j-k+m-k]+((f[!now][j]*c[j][k])%mod*c[n-j][m-k])%mod)%mod;
                    }
            }
            printf("%lld
    ",f[now][0]);
        }
    }
  • 相关阅读:
    【LeetCode OJ】Remove Element
    【LeetCode OJ】Remove Duplicates from Sorted Array
    【LeetCode OJ】Swap Nodes in Pairs
    【LeetCode OJ】Merge Two Sorted Lists
    【LeetCode OJ】Remove Nth Node From End of List
    【LeetCode OJ】Two Sum
    【LeetCode OJ】Majority Element
    最长公共子序列问题
    php fopen与file_get_contents的区别
    PHP 技巧集合
  • 原文地址:https://www.cnblogs.com/dongdong25800/p/11405894.html
Copyright © 2011-2022 走看看