ZOJ3791_An Easy Game

给出两个等长的字符串,每次需要改变m个数字,每次必须改变k个数字,求从第一个串变化到第二个串的方案数。

DP。f[i][j]改变i步后,有j个位置被改变的方案数。然后直接枚举当前改变的几个位置是前面重合的。

然后统计答案输出即可。

#include <iostream>
#include <cstring>
#include <cstdio>
#define M 1000000009
#define maxn 105
typedef long long ll;
using namespace std;

ll C[maxn][maxn];
ll f[maxn][maxn];
int n,k,m,change;
ll ans;

ll power(ll A,ll B)
{
    ll tot=1;
    while (B){
        if (B&1) tot=tot*A%M;
        A=A*A%M,B>>=1;
    }
    return tot;
}

void _init()
{
    memset(C,0,sizeof C);
    C[0][0]=1;
    for (int i=1; i<maxn; i++){
        C[i][0]=1;
        for (int j=1; j<=i; j++) C[i][j]=(C[i-1][j]+C[i-1][j-1])%M;
    }
}

int main()
{
    _init();
    char s1[maxn],s2[maxn];
    while (scanf("%d%d%d",&n,&k,&m)!=EOF){
        change=0;
        scanf("%s%s",s1,s2);
        for (int i=0; i<n; i++)
            if (s1[i]!=s2[i]) change++;
        memset(f,0,sizeof f);
        f[0][0]=1;
        for (int i=0; i<k; i++)//after the ith time of changes
            for (int j=0; j<=n; j++){//the number of 1 is j
                if (f[i][j]==0) continue;
                for (int x=max(0,j+m-n); x<=min(j,m); x++){
                    f[i+1][j-x+m-x]+=f[i][j]*(C[j][x]*C[n-j][m-x]%M)%M;
                    f[i+1][j-x+m-x]%=M;
                }
            }
        ans=f[k][change]*power(C[n][change],M-2)%M;
        printf("%d\n",(int)ans);
    }
    return 0;
}

ZOJ3791_An Easy Game

时间: 2024-10-12 01:36:16

ZOJ3791_An Easy Game的相关文章

地理数据可视化:Simple,Not Easy

如果要给2015年的地理信息行业打一个标签,地理大数据一定是其中之一.在信息技术飞速发展的今天,“大数据”作为一种潮流铺天盖地的席卷了各行各业,从央视的春运迁徙图到旅游热点预测,从大数据工程师奇货可居到马云布道“DT”时代,“大数据”被推到了一个前所未有的高度,连国家领导人出访演讲都言必称大数据.地理信息数据天生具有大数据属性,作为整天和地理信息数据打交道的地信人自然不甘落后,地理大数据概念脱颖而出. 地理大数据是什么?大体来说就是把社会经济.自然资源.商业信息等但凡具有一点空间维度的数据一股脑

哈理工2015暑假训练赛BNU16488 Easy Task(简单题)

A - Easy Task Time Limit:2000MS    Memory Limit:65536KB    64bit IO Format:%lld & %llu SubmitStatusPracticeZOJ 2969 Description Calculating the derivation of a polynomial is an easy task. Given a function f(x) , we use (f(x))' to denote its derivatio

Designing CSS Layouts With Flexbox Is As Easy As Pie

This article is an updated excerpt of the chapter "Restyle, Recode, Reimagine With CSS3″ from our Smashing Book #3, written by Lea Verou and David Storey. - Ed. Flexible box layout (or flexbox) is a new box model optimized for UI layout. As one of th

27. Remove Element【easy】

27. Remove Element[easy] Given an array and a value, remove all instances of that value in place and return the new length. Do not allocate extra space for another array, you must do this in place with constant memory. The order of elements can be ch

26. Remove Duplicates from Sorted Array【easy】

26. Remove Duplicates from Sorted Array[easy] Given a sorted array, remove the duplicates in place such that each element appear only once and return the new length. Do not allocate extra space for another array, you must do this in place with consta

Jquery Easy UI 实现页面的Loading效果(类似于Android的ProgressDialog)

前言 很常用的一种前端效果,比如当用户点击网页的某个按钮发送了一条异步请求,如果响应时间过长容易导致用户重复点击,一方面影响用户体验一方面容易造成不必要的服务端压力,Easy UI有现成的mask样式,简单封装一下就可以使用,之前查阅搜集了相关资料和文章,发现都介绍的都不是很完整,所以本篇blog就完整的记录一下通过Easy UI快速实现这种效果以及如何集成到项目中. 引入.封装和调用 首先当然是在我们的项目中集成jquery以及easyui的相关资源包,除了jquery的核心js文件,easy

Easy VPN

Easy VPN路由器上配置 R1(config)#aaa new-model 定义AAA R1(config)#aaa authentication login vpn_authen localR1(config)#aaa authorization network vpn_author localR1(config)#username cisco password ciscoR1(config)#crypto isakmp policy 10 定义一阶段策略的SA参数 R1(config-i

an easy problem(贪心)

An Easy Problem Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 8333   Accepted: 4986 Description As we known, data stored in the computers is in binary form. The problem we discuss now is about the positive integers and its binary form.

C语言 &#183; 交换Easy

算法提高 交换Easy 时间限制:1.0s   内存限制:512.0MB 问题描述 给定N个整数组成的序列,每次交换当前第x个与第y个整数,要求输出最终的序列. 输入格式 第一行为序列的大小N(1<=N<=1000)和操作个数M(1<=M<=1000). 第二行包含N个数字,表示初始序列. 接下来M行,每行两个整数x,y (1<=x,y<=N),表示要交换的两个整数.在一次交换中,如果x和y相等,则不会改变序列的内容. 输出格式 输出N行,为交换后的序列中的数. 样例输