poj-3791-An Easy Game-记忆化搜索
dp[i][j]:还有i个不同样的位置,还能走j步,一共同拥有多少种走法。
非常明显
dp[i][j]=sigm(dp[i-k][j-1]*c[i][k]*c[n-i][m-k]);
用记忆化搜索记忆一下就可以。
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<iostream>
#include<vector>
#include<map>
#include<stack>
using namespace std;
#define maxn 110
#define LL long long
#define mod 1000000009
LL dp[maxn][maxn];
LL c[maxn][maxn];
void init()
{
c[0][0]=1;
c[1][0]=1;
c[1][1]=1;
for(int i=2;i<maxn;i++)
{
c[i][0]=1;
for(int j=1;j<=i;j++)
{
c[i][j]=c[i-1][j-1]+c[i-1][j];
c[i][j]=c[i][j]%mod;
}
}
}
int n,m,k;
LL dfs(int s,int t,int p)
{
// cout<<s<<" "<<t<<" "<<p<<endl;
if(dp[s][p]!=-1)return dp[s][p];
if(p==0)
{
dp[s][p]=(s==0);
// printf("dp[%d][%d]===%lld\n",s,p,dp[s][p]);
return dp[s][p];
}
dp[s][p]=0;
for(int i=0;i<=k;i++)
{
if(s<i)continue;
if(t<k-i)continue;
dp[s][p]+=(c[s][i]*c[t][k-i])%mod*dfs(s-i+(k-i),t+i-(k-i),p-1)%mod;
dp[s][p]=dp[s][p]%mod;
}
// printf("dp[%d][%d]=%lld\n",s,p,dp[s][p]);
return dp[s][p];
}
int main()
{
char str[110];
char str2[110];
init();
while(~scanf("%d%d%d",&n,&m,&k))
{
memset(dp,-1,sizeof(dp));
scanf("%s",str);
scanf("%s",str2);
int s=0;
for(int i=0;i<n;i++)
{
if(str[i]!=str2[i])s++;
}
printf("%lld\n",dfs(s,n-s,m));
}
return 0;
}
poj-3791-An Easy Game-记忆化搜索的更多相关文章
- poj 1579(动态规划初探之记忆化搜索)
Function Run Fun Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 17843 Accepted: 9112 ...
- poj 3249(bfs+dp或者记忆化搜索)
题目链接:http://poj.org/problem?id=3249 思路:dp[i]表示到点i的最大收益,初始化为-inf,然后从入度为0点开始bfs就可以了,一开始一直TLE,然后优化了好久才4 ...
- poj 1661 Help Jimmy(记忆化搜索)
题目链接:http://poj.org/problem?id=1661 一道还可以的记忆化搜索题,主要是要想到如何设dp,记忆化搜索是避免递归过程中的重复求值,所以要得到dp必须知道如何递归 由于这是 ...
- poj 1085 Triangle War 博弈论+记忆化搜索
思路:总共有18条边,9个三角形. 极大极小化搜索+剪枝比较慢,所以用记忆化搜索!! 用state存放当前的加边后的状态,并判断是否构成三角形,找出最优解. 代码如下: #include<ios ...
- poj 1088 动态规划+dfs(记忆化搜索)
滑雪 Time Limit:1000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Description Mi ...
- POJ 3616 Milking Time ——(记忆化搜索)
第一眼看是线段交集问题,感觉不会= =.然后发现n是1000,那好像可以n^2建图再做.一想到这里,突然醒悟,直接记忆化搜索就好了啊..太蠢了.. 代码如下: #include <stdio.h ...
- POJ 1661 Help Jimmy ——(记忆化搜索)
典型的记忆化搜索问题,dfs一遍即可.但是不知道WA在哪里了= =,一直都没找出错误.因为思路是很简单的,肯定是哪里写挫了,因此不再继续追究了. WA的代码如下,希望日后有一天能找出错误= =: —— ...
- poj 1191 棋盘分割(dp + 记忆化搜索)
题目:http://poj.org/problem?id=1191 黑书116页的例题 将方差公式化简之后就是 每一块和的平方 相加/n , 减去平均值的平方. 可以看出来 方差只与 每一块的和的平方 ...
- poj 1579 Function Run Fun(记忆化搜索+dp)
题目链接:http://poj.org/problem?id=1579 思路分析:题目给出递归公式,使用动态规划的记忆搜索即可解决. 代码如下: #include <stdio.h> #i ...
- POJ 1198 / HDU 1401 Solitaire (记忆化搜索+meet in middle)
题目大意:给你一个8*8的棋盘,上面有四个棋子,给你一个初始排布,一个目标排布,每次移动,可以把一个棋子移动到一个相邻的空位,或者跨过1个相邻的棋子,在保证棋子移动不超过8次的情况下,问能否把棋盘上的 ...
随机推荐
- 初入Android--Activate生命周期
Activate的主要生命周期 (注意:这只是主要的生命周期,而不是完整的生命周期方法,其中的两个周期之间可能还执行了其他的一些方法) 每个时刻在屏幕上的状态 进入onCreate方法:Activat ...
- RAD路线规划2016版
http://community.embarcadero.com/article/news/16211-embarcadero-rad-studio-2016-product-approach-and ...
- c# winform 让Form去掉系统自带的关闭
在桌面系统时我们有时候想把winform 自带的关闭按钮和最大化最小化都去掉,我遇到了类似的情况,在网上一查也有很多答案,但是最后找到了一个最简单的答案,一句话的事,今天记录一下,就是让大家都简单的实 ...
- 在chrome中使用axure生成原型的问题
来自:非原型不设计
- java http 分段下载
http://www.iteye.com/topic/1136815 http://www.iteye.com/topic/1128336 http://blog.chinaunix.net/uid- ...
- Mac上利用Eclipse编译Cocos2d-x
目前使用较多的Cocos2d-x开发平台是XCode,应该是由于大部分Cocos2d-x开发者都是iOS开发出生.但是当我们将XCode开发的Cocos2d-x工程发布Android版本时,每次都需要 ...
- shell oracle
#!/bin/sh traffic= rm -rf test.txt data=`sqlplus -S anoscfg/anoscfg <<EOF spool test.txt set f ...
- CentOS6.4 安装Mysql
虽说,新版的数据包可能会带上一些新特性,但是数据库对我而言,还是稳定版优先.因为新特性不一定我会用到.. 下载安装: yum list | grep mysql 因为是准备搞开发用的,所以只要安装my ...
- [置顶] android之Notification版本兼容性问题
首先先来创建一个notification提示 //概要 String tickerText = context.getResources().getText(R.string.app_name).to ...
- Swift - 时间控制器NSTimer(每隔一定时间执行某个函数)
时间控制器NSTimer可以实现定时器功能,即每隔一定时间执行具体函数,可以重复也可以只执行一次. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 cl ...