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次的情况下,问能否把棋盘上的 ...
随机推荐
- 基于visual Studio2013解决面试题之1101差值最小
题目
- Recipes — Bottle 0.13-dev documentation
Recipes - Bottle 0.13-dev documentation Recipes¶ This is a collection of code snippets and examples ...
- 解决java mail发送TXT附件被直接显示在正文中的问题
这两天遇到一个问题,关于使用java mail发送邮件的问题. 详细是这样子的:我使用java mail发送异常报告邮件,邮件中有一个包含异常日志的附件,和关于设备信息的邮件正文.假设日志为log后缀 ...
- c#引用web.config中的ConnectionString
c#引用web.config中的ConnectionString <connectionStrings> <add name="JKXTConnectionString& ...
- js下firstElementChild firstChild 以及childNodes和children方法
一. <div> <p>123</p> </div> 在上面这段代码中,如果使用以下js代码 var oDiv=document.getElementB ...
- Cocos2d-x 学习(1)—— 通过Cocos Studio创建第一个Demo
近期在工作上有了比較大的转变,自学情绪也慢慢高涨,本来一直在研究unity的技术.由于换了工作会開始接触cocos2d-x.但并不意味着停止研究unity,以后有时间还是会继续的. 公司的cocos2 ...
- 一次完整的HTTP请求所经历的7个步骤(前三步是浏览器工作,后四步是服务器工作)
HTTP通信机制是在一次完整的HTTP通信过程中,Web浏览器与Web服务器之间将完成下列7个步骤: 1. 建立TCP连接在HTTP工作开始之前,Web浏览器首先要通过网络与Web服务器建立连接,该连 ...
- An example usage of an encryption algorithm (AES, in this case) is:
pycrypto 2.6.1 : Python Package Index An example usage of an encryption algorithm (AES, in this case ...
- 查找附近网点geohash算法及实现 (Java版本号)
參考文档: http://blog.csdn.net/wangxiafghj/article/details/9014363geohash 算法原理及实现方式 http://blog.charlee ...
- C嵌入汇编
概述:linux内核源码中,有很多C语言中嵌入了汇编语句,如何理解这些汇编语句,对理解内核有很重要的作用. 具有输入和输出参数的嵌入式汇编语句的基本格式为: asm("汇编语句" ...