洛谷1002 容斥原理+dfs OR DP
//By SiriusRen
#include <bits/stdc++.h>
using namespace std;
#define int long long
int n,m,sx,sy,xx[]={,,,,-,-,-,-,},yy[]={,-,,-,,-,,-,};
int stk1[],stk2[],stk[],C[][],Ans,top;
bool check(int x,int y){return x>=&&y>=&&x<=n&&y<=m;}
int solve(int dep){
int lastx=,lasty=,ans=;
for(int i=;i<=dep;i++){
int tx=stk1[stk[i]]-lastx,ty=stk2[stk[i]]-lasty;
// printf("tx=%d ty=%d\n",tx,ty);
ans*=C[tx+ty][tx];
lastx=stk1[stk[i]],lasty=stk2[stk[i]];
}
int tx=n-lastx,ty=m-lasty;
return ans*C[tx+ty][tx];
}
void dfs(int x,int y,int nw,int dep){
if(dep&)Ans-=solve(dep);
else Ans+=solve(dep);
// printf("x=%lld y=%lld dep=%lld Ans=%lld\n",x,y,dep,solve(dep));
for(int i=;i<=top;i++){
if(i!=nw&&stk1[i]>=x&&stk2[i]>=y){
stk[dep+]=i;
dfs(stk1[i],stk2[i],i,dep+);
}
}
}
signed main(){
scanf("%lld%lld%lld%lld",&n,&m,&sx,&sy);
for(int i=;i<=;i++){
C[i][]=C[i][i]=;
for(int j=;j<i;j++)
C[i][j]=C[i-][j-]+C[i-][j];
}
for(int i=;i<=;i++){
int dx=sx+xx[i],dy=sy+yy[i];
if(check(dx,dy))stk1[++top]=dx,stk2[top]=dy;
}
dfs(,,,);
printf("%lld\n",Ans);
}
//By SiriusRen
#include <stdio.h>
long long n,m,sx,sy,i,j,vis[][],F[][],xx[]={,,,,-,-,-,-,},yy[]={,-,,-,,-,,-,};
int check(int x,int y){return x>=&&y>=&&x<=n&&y<=m;}
signed main(){
scanf("%I64d%I64d%I64d%I64d",&n,&m,&sx,&sy);
for(i=;i<=;i++){
int dx=sx+xx[i],dy=sy+yy[i];
if(check(dx,dy))vis[dx][dy]=;
}
F[][]=;
for(i=;i<=n;i++){
for(j=;j<=m;j++)if(!vis[i][j]){
if(i)F[i][j]+=F[i-][j];
if(j)F[i][j]+=F[i][j-];
}
}printf("%I64d\n",F[n][m]);
return ;
}
洛谷1002 容斥原理+dfs OR DP的更多相关文章
- 洛谷 P5279 - [ZJOI2019]麻将(dp 套 dp)
洛谷题面传送门 一道 dp 套 dp 的 immortal tea 首先考虑如何判断一套牌是否已经胡牌了,考虑 \(dp\).我们考虑将所有牌按权值大小从大到小排成一列,那我们设 \(dp_ ...
- 洛谷 P2392 kkksc03考前临时抱佛脚, dp / 深搜
题目链接 P2392 kkksc03考前临时抱佛脚 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题目 dp代码 #include <iostream> #includ ...
- 洛谷2344 奶牛抗议(DP+BIT+离散化)
洛谷2344 奶牛抗议 本题地址:http://www.luogu.org/problem/show?pid=2344 题目背景 Generic Cow Protests, 2011 Feb 题目描述 ...
- Lightning Conductor 洛谷P3515 决策单调性优化DP
遇见的第一道决策单调性优化DP,虽然看了题解,但是新技能√,很开森. 先%FlashHu大佬,反正我是看了他的题解和精美的配图才明白的,%%%巨佬. 废话不多说,看题: 题目大意 已知一个长度为n的序 ...
- 洛谷P1541 乌龟棋(四维DP)
To 洛谷.1541 乌龟棋 题目背景 小明过生日的时候,爸爸送给他一副乌龟棋当作礼物. 题目描述 乌龟棋的棋盘是一行N个格子,每个格子上一个分数(非负整数).棋盘第1格是唯一的起点,第N格是终点,游 ...
- 【洛谷】P1052 过河【DP+路径压缩】
P1052 过河 题目描述 在河上有一座独木桥,一只青蛙想沿着独木桥从河的一侧跳到另一侧.在桥上有一些石子,青蛙很讨厌踩在这些石子上.由于桥的长度和青蛙一次跳过的距离都是正整数,我们可以把独木桥上青蛙 ...
- 【题解】洛谷P1052 [NOIP2005TG] 过河(DP+离散化)
题目来源:洛谷P1052 思路 一开始觉得是贪心 但是仔细一想不对 是DP 再仔细一看数据不对 有点大 如果直接存下的话 显然会炸 那么就需要考虑离散化 因为一步最大跳10格 那么我们考虑从1到10都 ...
- 洛谷 P1784 数独[DFS/回溯]
To 洛谷.1784 数独类似题:CODEVS.4966 简单数独(4*4数独) CODEVS.2924 数独挑战) 题目描述 数独是根据9×9盘面上的已知数字,推理出所有剩余空格的数字,并满足每一行 ...
- 洛谷1736(二维dp+预处理)
洛谷1387的进阶版,但很像. 1387要求是“全为1的正方形”,取dp[i][j] = min(dp[i-1][j-1], min(dp[i-1][j], dp[i][j-1]))吧?这个有“只有对 ...
随机推荐
- 第十三节:web爬虫之Redis数据存储
下面仅仅展示Redis的set()集合存储,并不完整,后期会对Redis进行全面的介绍.... 此时数据已经存储到Redis当中
- Uva 10730 Antiarithmetic?
uva 10730 题意:给出一列数字,如果其中存在长度大于等于3的等差数列,输出no,不存在就输出yes 这道题标定了数列长度n,而且这n个数数据范围是从0到n-1,没有相同的数,这就给我们枚举提供 ...
- python函数基础:嵌套函数、作用域、匿名函数、高阶函数、递归函数
嵌套函数: 1. 函数内部可以再定义函数 2. 函数只有被调用之后才会执行 看如下代码: age = 18 def func1(): age = 22 print(age) def func2(): ...
- [USACO5.3]校园网Network of Schools 缩点
题目描述 一些学校连入一个电脑网络.那些学校已订立了协议:每个学校都会给其它的一些学校分发软件(称作“接受学校”).注意即使 B 在 A 学校的分发列表中, A 也不一定在 B 学校的列表中. 你要写 ...
- MYSQL中的数值型数据类型与字符串类型
/* 数值型数据类型主要用来存储数字,包含的类型有: TINYINT.SMALLINT.MEDIUMINT. INT(INTEGER). BIGINT TINGINT占1个字节,SMALLINT占2个 ...
- 【sql技巧】mysql修改时,动态指定要修改的字段 update `table` set (case when ....) = 1 where id = xx
如果你点进了这篇帖子,那么你一定遇到了跟我一样的问题.别看题目的set case when...,我一开始也是第一反应是用case when但是发现并不好使. 问题呢,说得高大上一点:动态指定要修改的 ...
- 编程规范(一 之kmalloc,fflush,fclose,char_init)
1. kmalloc函数接口: 在我们使用的时候常常使用该接口,可是我们非常少注意过这个接口的一些比較重要的 内核接口.比如: /*申请一个HASH表的大小*/ #define HASH_MALLOC ...
- Cannot update identity column 'XXX'
Sqlserver -- 怎样改动设置主键的id能够手动更新? #1 打开表的设计界面 #2 将主键id的is Identity的属性改成No 这样就能够通过Update语句来更新表的主键id了. 怎 ...
- JavaWeb开发环境搭建
Tomcat 的主要配置 Tomcat:tomcat是实现了一个JavaEE标准的最小的Webserver,是Apche组织开发的,免费的server,能够在网络中直接下载. 最新的版本号应该是8的版 ...
- 记录 mysql sql limit 0,100问题
某个场景分页查询出第一页的数据,, limit 0,100 第一页 limit 100,100 第二页 limit 200,100 第三页 select * from user limit 0,10 ...