1235 -- 古明地觉的节操教育
来源:互联网 发布:专业光束灯光编程 编辑:程序博客网 时间:2024/06/08 03:48
Description
对于下述条件计算恋恋拿到礼物有几种走法。
给一个N*M的图,恋恋起始在左上角,坐标(1,1),面向右或者面向下,礼物坐标在(X,Y),图以外的区域全是洞,图以内还有K个洞,所有在洞上的东西都会掉下去,包括道具和路标。小五现在没有道具可以使用,但是有无限个指向右的路标和无限个指向下的路标可以使用。
小五可以在任意空地上放置道具和路标,恋恋只会无意识的向前走。
如果恋恋前面一格有路标,恋恋就会看一样路标,并往路标指的方向走。
如果恋恋前面一格的路标的指向和恋恋的走向一样,恋恋就会无视它,并且踩过去。
如果恋恋当前格子是洞,恋恋就会掉下去。
Input
输入数据第一行有三个整数N、M、K、X、Y(3<=N,M<1000,0<=K<n*m,1<=x<=n,1<=y<=m)
以下有K行,每行有两个整数Xi、Yi(1<=Xi<=N,1<=Yi<=M)第i个洞的坐标为(Xi,Yi)
数据保证每个洞和恋恋和礼物的位置均不同
Output
输出恋恋拿到礼物的走法数mod 10007的余数
Sample Input
4 4 1 3 42 2
Sample Output
2
Hint
样例中恋恋的两种走法分别是:
1.下下右右右
2.右右下下右
ps:快去台湾了,想起来还有些大一的历史问题。
动态规划,每个位置有向右,向下两种状态.状态仅向右和向下转移,检查状态转移的合法性,瞎写一下。
//#include <bits/stdc++.h>#include <cstdio>#include <iostream>#include <algorithm>typedef long long ll;typedef double db;#define rep(i,a,n) for (int i=a;i<n;i++)#define per(i,a,n) for (int i=n-1;i>=a;i--)#define mp make_pair#define pb push_back#define fi first#define se second#define all(x) (x).begin(),(x).end()#define SZ(x) ((int)(x).size())#define sspeed ios::sync_with_stdio(false);cin.tie(0)using namespace std;const int inf = 0x3f3f3f3f;const int md = int(1e9) + 7;ll mypow(ll a,ll e){ if(e==0)return 1; return e&1?mypow(a,e-1)*a%md:mypow(a*a%md,e>>1);}inline ll gcd(ll a,ll b) {return b?gcd(b,a%b):a;}inline int read(){ int x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();} return x*f;}// headconst int mod = 10007;const int maxn =1005;int dp[maxn][maxn][2];int vi[maxn][maxn];int main() { sspeed; int n,m,k,x,y,xi,yi; cin>>n>>m>>k>>x>>y; rep(i,1,k+1) cin>>xi>>yi,vi[xi][yi] = 1; rep(i,1,n+1) vi[i][m+1] = 1; rep(i,1,m+1) vi[n+1][i] = 1; //初始化状态转移 if(!vi[1][2]) dp[1][2][1] = 1; if(!vi[2][1]) dp[2][1][0] = 1; //0 向下 1 向右 dp[i][j][]表示达到时的该状态的方案数 rep(i,1,n+1) rep(j,1,m+1) { if(i == 1 && j == 1) {continue;} if(dp[i][j][0]) { if(!vi[i+1][j]) dp[i+1][j][0] = (dp[i+1][j][0] + dp[i][j][0]) %mod; if(!vi[i+1][j]&&!vi[i][j+1]) dp[i][j+1][1] = (dp[i][j+1][1] + dp[i][j][0]) %mod; } if(dp[i][j][1]) { if(!vi[i][j+1]) dp[i][j+1][1] = (dp[i][j+1][1] + dp[i][j][1]) %mod; if(!vi[i][j+1] && !vi[i+1][j]) dp[i+1][j][0] = (dp[i+1][j][0] + dp[i][j][1]) %mod; } } cout<<(dp[x][y][0] + dp[x][y][1]) %mod<<endl; return 0;}
阅读全文
0 0
- 1235 -- 古明地觉的节操教育
- 【父母的教育角色要及早扮演】“古…
- 让别人快乐地捐钱:英国人的慈善教育
- 节操洒一地:套套竟成为Manpacks推广奇招
- 优美的古词
- 史上最牛高三老师:请保持光棍的节操
- 做软件测试的节操和底线
- android webview 漏洞背后的节操
- 一种毫无节操的机制---预解释
- 简单的节操视屏播放
- 终于可以慢慢地接近自己的梦想了—兄弟连IT教育
- 不收快递(首长的无节操掉Rp题)
- 论如何挽回handle返回值的节操
- 从毛片谈起——系统管理员的节操
- JS中预处理是一种好无节操的机制
- 节操播放器问题的较完整总结(上)
- Delphi7做的古汉文翻译系统
- 永远辉煌的古巴比伦文化
- 数据结构实验之排序一:一趟快排
- 编译并运行hadoop的URLCat示例
- OkHttp:一次不太高级的封装
- 数组和集合之间关系
- 数据结构实验之排序四:寻找大富翁
- 1235 -- 古明地觉的节操教育
- PyQt4开发环境搭建指导 基于Windows 10和+ Python3.x+PyQt4
- 迷宫项目学习内容总结2017/12/23
- Linux与虚拟机
- C语言求一元二次方程的根,这题很简单嘛?看看这种想法很惊奇!
- 43. Multiply Strings
- java 开发模式之十三 : 代理模式
- Vue2技术栈归纳与精粹
- netty源码分析(二十五)Netty自定义协议与TCP粘包拆包问题解决之道