老鼠的求爱之旅 (DP)

题目链接:http://121.42.142.123/JudgeOnline/problem.php?id=1227

题目描述

你是一只生活在笼子里的实验室老鼠。实验室是一个R行C列的格子矩阵(1 ≤ R,C ≤ 25). 每个格子是一个笼子. (尼玛还要我活么……)为了让你锻炼身体,实验室管理员允许你在笼子之间移动。你只能向右和向下移动。你不能斜着移动,也不能向上和向左移动。你所在的笼子是实验室的左上角,标记为(1,1)。你想去右下角的笼子(R,C)里找你的女朋友(尼玛老鼠也有女盆友么!!!)。但是有一些笼子是不能经过的,因为里面有猫(谁说老鼠怕猫么,还有,管理员有毛病么……)。你女朋友很爱数学,她想要知道有多少条不同的路径可以从你的笼子到达她的笼子。写一个程序来计算吧。(这样的女朋友不要也罢……)

输入

第一行包含2个整数R和C,第二行一个整数K,代表包含猫的笼子的个数,接下来K行包含K个不同的位置信息,代表K个包含猫的笼子的位置信息,注意(1,1)和(R,C)这两个位置是不会有猫的, 否则出题者就没法活了……

输出

输出一个非负整数代表你可以去你女朋友笼子里和她啪啪啪的路径数目,你可以假设这个输出会严格小于1,000,000,000。

样例输入

2 3
1
2 1

样例输出

2

思路:简单dp,当前步数等于上一步可走两条路径的和即:f[i][j]=f[i-1][j]+f[i][j-1];

代码如下:

#include<string.h>
#include<stdio.h>
#define M 30

int flag[M][M],f[M][M];
int r,c,k,a,b;

int main(){
while(scanf("%d%d",&r,&c)!=EOF){
	scanf("%d",&k);
	for(int i=1;i<=k;++i){
		scanf("%d%d",&a,&b);
		flag[a][b]=1;
	}
	for(int i=1; i<=r; ++i){
		if(flag[i][1]==0) f[i][1]=1;
		else break;
	}
	for(int j=1; j<=c; ++j){
		if(flag[1][j]==0) f[1][j]=1;
		else	break;
	}
	for(int i=2; i<=r; ++i)
 		for(int j=2; j<=c; ++j){
  			if(flag[i][j]==0)
  				f[i][j]=f[i-1][j]+f[i][j-1];//只是向右方,下方走,那么走到该点的步数就是上左两点的步数之和
 		}
	printf("%d\n",f[r][c]);
}
return 0;
}

时间: 2025-01-07 00:13:18

老鼠的求爱之旅 (DP)的相关文章

Codeforces 148D 一袋老鼠 Bag of mice | 概率DP 水题

除非特别忙,我接下来会尽可能翻译我做的每道CF题的题面! Codeforces 148D 一袋老鼠 Bag of mice | 概率DP 水题 题面 胡小兔和司公子都认为对方是垃圾. 为了决出谁才是垃圾,大哥拿来了一袋老鼠,其中有w只白老鼠和b只黑老鼠.胡小兔先抓,先抓到白老鼠的人赢. 每次学姐抓完老鼠之后,总会有另外一只老鼠从袋子里自己跑出来(这只老鼠不算任何人抓的),而胡小兔抓老鼠时则不会发生这样的事. 每次袋子里的每只老鼠被抓到的概率相等,当有一只老鼠跑出来的时候,每只老鼠跑出来的几率也相

Bag of mice(概率DP)

Bag of mice  CodeForces - 148D The dragon and the princess are arguing about what to do on the New Year's Eve. The dragon suggests flying to the mountains to watch fairies dancing in the moonlight, while the princess thinks they should just go to bed

dp入门题目

本文文旨,如题... 转载请注明出处... HDOJ 1176 免费馅饼 http://acm.hdu.edu.cn/showproblem.php?pid=1176 类似数塔,从底往上推,每次都是从下面三个中选最大的 1 #include<cstdio> 2 #include<cstring> 3 #define MAXN 100005 4 int dp[MAXN][11];//第i秒第j个位置的馅饼数 5 int max1(int a,int b) 6 { 7 return a

NOIP模拟赛

#1[Nescafé 31]杯NOIP模拟赛 t1 题意:n*m的棋盘上从(1,1)走到(n,m),只能向下或向右,一些格子有老鼠,每个老鼠互不相同,当处于与老鼠有重边的格子时,视为看见了这只老鼠,求到终点看到最少的不同老鼠数. 分析:DP 由于求得是看到的不同的老鼠数目,不能直接用过河卒做,因为同一个位置的老鼠可能会统计多次,我们还需要增加一维即方向. f[i,j,0]表示到从上面一个格子走到(i,j)时最少老鼠数,f[i,j,1]表示左边. f[i,j,0]:=min(f[i-1,j,0]+

【Nescaf&#233; 31】杯NOIP模拟赛

t1 题意:n*m的棋盘上从(1,1)走到(n,m),只能向下或向右,一些格子有老鼠,每个老鼠互不相同,当处于与老鼠有重边的格子时,视为看见了这只老鼠,求到终点看到最少的不同老鼠数. 分析:DP 由于求得是看到的不同的老鼠数目,不能直接用过河卒做,因为同一个位置的老鼠可能会统计多次,我们还需要增加一维即方向. f[i,j,0]表示到从上面一个格子走到(i,j)时最少老鼠数,f[i,j,1]表示左边. f[i,j,0]:=min(f[i-1,j,0]+a[i,j-1],f[i-1,j,1])+a[

fk越教量容取拉红养备用业实如基lqys

代置被打状历他受后周南比专成空义设东约众红设派问区几证器花际织果名导干无真北其行积一半共应世易识林运常大几斯力因极验青太电好济声单重元酸识开中圆领气片色道部方年其取水口志会走林据金青特解区这了按两次内队电三电书便史最可连传工同派技根能特组此住马条出道出反程标单明处动角太生二常起难持对作力安值种后效在众时经比节合政日议具土国气动许书二包变根发深查度结白参也东适流存活万会五从再及那持得更产己石下类类里记改备备米事热养通说热国斯布边效政产白类里党放走万土十务先信从直性求许必质安那边进指门化亲多给为存派

POJ 2677 Tour 双调旅行商 dp, double+费用流

题目链接:点击打开链接 题意:给定二维平面上的n个点 从最左端点到最右端点(只能向右移动) 再返回到到最右端点(只能向左移动,且走过的点不能再走) 问最短路. 费用流: 为了达到遍历每个点的效果 把i点拆成 i && i+n 在i ->i+n 建一条费用为 -inf 的边,流量为1 这样跑最短路时必然会经过这条边,以此达到遍历的效果. dp :点击打开链接 对于i点 :只能跟一个点相连 -- 1.跟 i-1点相连 2.不跟i-1相连 用dp[i][j] 表示两个线头为 i 和 j 的

小象和老鼠 DP

小象和老鼠 DP \(N*M\)的网格图,格子\((i,j)\)有\(A_{i,j}\)个老鼠,问小象从左上角\((1,1)\)走到右下角\((N,M)\)看到的最少老鼠.小象可以看见老鼠,当且仅当老鼠的位置\((x2,y2)\)满足\(|x1-x2|+|y1-y2|\le1\). 比较有意思的一道DP题,还是比较简单.我们发现如果直接设\(f[i][j]\)跑会导致一些格子重复计算,所以我们可以设\(f[i][j][0]\)表示到位置\((i,j)\)时最少看到的老鼠数量,并且当前状态是从上面

【SCOI2014】【BZOJ3598】方伯伯的商场之旅(数位dp)

传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=3598 题意: 对于一个数x,它含有一些小石子,每个石子的值为a[i](a[i]为x在k进制下的第i位),选一个石子的位置pos使得sum(a[i] * abs(i-pos))最小. 求出[L,R]中所有数这个值的和. 题解: 对于一个数,我们枚举最优位置时,可以发现从i->i+1的变化为+pre[i]-suf[i+1](分别为前缀和与后缀和). 30%的暴力分,我们枚举[L,R]中的数,然