首页 > 其他分享 >[题解] Flipping Game

[题解] Flipping Game

时间:2024-05-13 21:56:14浏览次数:14  
标签:状态 初始状态 int 题解 Flipping cin Game 1010

题目描述
有n盏灯,每个灯有开和关两种状态。每按一次灯会变成相反的状态。
给定灯初始的开关状态和结束的开关状态,若操作k轮,每轮要按m个不同的灯,问有多少种方法使灯由初始状态变到结束状态。

题解
需注意每轮要按不同的灯,若无这个条件,暴力计算组合数即可。

要操作多轮,且每轮按灯的操作顺序不予考虑。
则可将第i轮视为状态,操作视为状态转移。考虑dp。
设计的状态既需要考虑轮次又需要考虑到是否到达结束状态。

先将问题抽象化:将初始状态和结束状态灯相对比,若状态不同,则灯需按奇数次;否则需按偶数次。
设f[i][j]表示在第i轮,尚有j个灯需按奇数次。
则初始状态f[0][d]=1,f[k][0]为答案。(设d为初始状态和结束状态不同的灯的数量)

转移时考虑:该轮将x个需按奇数次的灯按一次,再按m-x个另外的灯。
f[i][j-x+m-x]=sum(f[i-1][j]/timesC(j,x)*C(n-j,m-x),0<=x<=min(j,m)

代码

#include<bits/stdc++.h> 
#define  int  long long
using namespace std;
const int mod=998244353;
int C[1010][1010];
int f[1010][1010];
void calc(){
	for (int i=0;i<=1007;i++) {
        C[i][0]=1;
        for (int j=1;j<=i;j++)C[i][j]=(C[i-1][j-1]+C[i-1][j])%mod;
    }
}
signed main(){
	int t;
	cin>>t;
	calc();
	while(t--){
		int n,kk,m;
		cin>>n>>kk>>m;
		string s,t;
		cin>>s;
		cin>>t;
		int d=0;
		for(int i=0;i<n;i++)if(s[i]!=t[i])d++;
		f[0][d]=1;
		for(int i=1;i<=kk;i++){
			for(int j=0;j<=n;j++){
				for(int k=0;k<=min(j,m);k++){
					if(n-j<m-k)continue;
					(f[i][j-k+m-k]+=f[i-1][j]*C[j][k]%mod*C[n-j][m-k]%mod)%=mod;
				}
			}
		}
		cout<<f[kk][0]<<"\n";
		for(int i=0;i<=kk;i++)
			for(int j=0;j<=n+m;j++)
				f[i][j]=0;
	}
}

标签:状态,初始状态,int,题解,Flipping,cin,Game,1010
From: https://www.cnblogs.com/zwzww/p/18190111

相关文章

  • 题解:SP10232 AMR11E - Distinct Primes
    前话这咋人名都和HP一模一样了,SPOJ出题人里是不是全是哈迷啊。思路非常直观的一个思路:从前往后枚举每一个数,看是否满足条件,输出满足条件的第一个。CODE#include<bits/stdc++.h>usingnamespacestd;boolis(intn){//判断质数if(n<2)return0;for(inti=2;i<......
  • 题解:CF1337A Ichihime and Triangle
    看到大佬们基本都是直接输出\(b\)\(c\)\(c\)了事儿,一身反骨有其它构造方法的我表示不服,遂作此篇。众所周知,两边之和大于第三边,所以,如果\(b+c>d\),那么\(b\)、\(c\)、\(d\)就是正确的。那如果不满足呢?在题目条件下\(b+c>b+c-1\),那么这一组就是合理的。分别验......
  • NOIP真题题解
    2001T4Car的旅行路线ybtluogu建图+最短路1.建图时细节较多已知三点求第四点的坐标勾股定理判断斜边2.最短路时多起点多终点2013D1T3货车运输ybtluogu最大生成树+倍增LCA答案的边一定在最大生成树上将原图建出最大生成树在树上使用倍增LCA提取路径2014D2T2寻......
  • 5.13 模拟赛题解(没写完)
    T1P4304[TJOI2013]攻击装置快进到HZOI2023超越HZOI2020(人均场切了紫)考虑将棋盘黑白染色成这个样子容易发现相同颜色的点直接一定没有冲突,满足二分图的性质,需要求出最小点覆盖,所以直接按冲突建好双向边,从\(1\)到\(n^2\)节点跑最大匹配即可。设求出的最大匹配为\(......
  • HydroOJ 从入门到入土(19)导入题解和标程、题目数据统计(>=4.12.0)
    题解和std可以导入了,导出还会远吗?目录一、导入题解和标程1.目录结构2.测试结果3.第二次测试题目结构如下:测试结果:4.总结:关于题解:关于标程(std):去除.DS_Store的解决方法二、题目数据统计1.范围2.筛选选项3.无关紧要的小bug一、导入题解和标程新版本更新了这个功能,方......
  • THUSC总结PART1-比赛总结/题解
    第一次参加\(THU\)的营,战绩惨不忍睹.D1T1给出\(d\),\(n_1\cdotsn_d\),\(l\),求\[\sum_{i_1=0}^{n_1-1}\sum_{2_1=0}^{n_2-1}\cdots\sum_{i_d=0}^{n_d-1}\max(0,(i_1\oplusi_2\oplus\cdotsi_d)-l)\]其中\(d<=10\),\(n_i<=1e18\),\......
  • 【问题解决】java.lang.NoSuchMethodError错误
    问题现象近期本人负责的一个SpringBoot模块出现了java.lang.NoSuchMethodError报错,问题情况如下:A类提供了setJumpType(Stringtype),B类调用A类的setJumpType(Stringtype)报错java.lang.NoSuchMethodError:com.xxx.A.setJumpType(Ljava/lang/String;)V在之前的发版的程序中,B......
  • abc353f 题解
    大分讨,由于没注意到细节挂大分。下面称大小为\(n\timesn\)的为大格子,\(1\times1\)的为小格子。把\(n\timesn\)个小格子组成的正方形称为一个部分。分析我们先来讨论一般情况。思考一对于\(n\ge3\)的一般情况,如果要求任意两个大格子到对方的距离最小,怎么做?根据贪......
  • cfRounddiv3--CDEF题解
    C-AssemblyviaRemainders思路:因为xi最大只有500,而构造的ai最大可以到1e9,直接从501开始构造即可。voidsolve(){//C简单构造intn;cin>>n;vector<int>vct;vct.emplace_back(501);for(inti=2;i<=n;i++){intx;cin>>x;vc......
  • Atcoder ABC 353 全题解
    最近看的人好少……都快不想写了……你们的支持就是我创作的最大动力!AB%你CDE题意:有一个一个一个函数,把函数两两配对式求值,求这些值最后的总和C考虑将所有的和减去$10^8$出现的次数。将整个数组排序,然后进行二分,求第一个与这个数的和$\ge10^8$的位置,然后与这个数......