ZOJ - 4114 Flipping Game

  题目大意:给出两个串s,t,n个灯泡的序列,1代表开着,0代表关着,一共操作k轮,每轮改变m个灯泡的状态,问最终能把s串变成t串的方案数。

  坤神题解

  很奇特的一种dp,首先状态的定义dp[i][j]是前i轮操作后,有j个灯泡的状态跟最终串不一样的方案数。这样初始化是dp[0][num]=1其他全0,num是s串和t串状态不同的灯泡数目。然后状态的转移,对于每一轮我们枚举有j个灯泡跟最终串状态不一样,然后再枚举上一轮有kk个灯泡与最终串状态不一样,每次操作都会改变灯泡的状态,设上一轮不一样的状态改变了x个,一样的状态改变了y个,那么x,y应该有0<=x<=kk,0<=y<=n-kk,x+y=m,kk-x+y=j,这四个约束条件,而满足约束条件的就是合法的转移过程,也就是dp[i][j]=dp[i-1][kk]*C[kk][x]*C[n-kk][y]最后注意取模。

 #include<cstdio>
typedef long long ll;
const int N=,mod=;
ll dp[N][N],C[N][N];
char a[N],b[N];
void getC()
{
C[][]=1ll;
for(int i=;i<=;i++)
{
C[i][]=1ll;
for(int j=;j<=i;j++)
{
if(j<=i/)
C[i][j]=C[i-][j]+C[i-][j-];
else
C[i][j]=C[i][i-j];
if(C[i][j]>=mod)
C[i][j]%=mod;
}
}
}
void init(int n,int k)
{
for(int i=;i<=k;i++)
for(int j=;j<=n;j++)
dp[i][j]=0ll;
int num=;
for(int i=;i<n;i++)
num+=(a[i]!=b[i]);
dp[][num]=;
}
int main()
{
int t,n,m,k,x,y;
getC();
scanf("%d",&t);
while(t--)
{
scanf("%d%d%d",&n,&k,&m);
scanf("%s%s",a,b);
init(n,k);
for(int i=;i<=k;i++)
for(int j=;j<=n;j++)
for(int kk=((m+j)&);kk<=m+j&&kk<=n;kk+=)
{//把约束条件联立一下可以得出合法条件下的x,y
y=(m+j-kk)/;
x=m-y;
if(x<||y<||x>kk||y>n-kk)
continue;
dp[i][j]+=dp[i-][kk]*C[kk][x]%mod*C[n-kk][y]%mod;
if(dp[i][j]>=mod)
dp[i][j]%=mod;
}
printf("%lld\n",dp[k][]);
}
return ;
}

神奇的dp

最新文章

  1. CSS3动画几个平时没注意的属性
  2. Semaphore(计数信号量)
  3. android 生成验证码图片
  4. node.js的优缺点
  5. IOS开发网络数据---- AFNetworking的使用
  6. 【转】Unity中的协同程序-使用Promise进行封装(一)
  7. easyui tree 编辑后保留原先状态
  8. 重构24-Remove Arrowhead Antipattern(去掉箭头反模式)
  9. lua string函数
  10. C#网络编程简单实现通信小例子-2
  11. Wpf TextChanged事件导致死循环,事件触发循环问题
  12. Apache Commons Pool 故事一则
  13. Python_csv电子表格
  14. mybatis-generator 自动生成mapper以及实体类
  15. javascript +new Date()
  16. 反转链表 II
  17. Linux之异步通知机制分析
  18. dp\dpi\px\pt\em单位长度理解
  19. bzoj 3172: [Tjoi2013]单词 AC自动机
  20. bugfree登录后报错PHP Fatal error: Call-time pass-by-reference has been removed in

热门文章

  1. PostgreSQL练习3
  2. JAVA中线程到底起到什么作用!
  3. springMVC接受json类型数据
  4. spring-cloud 学习三 服务提供者
  5. php.ini中allow_url_fopen和allow_url_include的设置
  6. Oracle 以及 PLSQL安装
  7. JS基础_返回值的类型
  8. 微信Emoji表情代码大全
  9. 1.IOC原理模拟
  10. ASE19团队项目alpha阶段model组 scrum11 记录