题目:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1327

因为一列填1个或0个(或0个!!!),而一行不知填多少个,所以按列dp。

发现 l 和 r 的限制略有不同。大约是 l 如果先不填的话,在列向右移动的过程中可能就不能填了;而 r 一旦遇到,之后想什么时候填都可以。

所以可以记录空下了几列,遇到 l 的右边界时再处理该行,即从之前空下的列中选一个给该行;如果一下有多个 l 的右边界,乘上一个排列即可。

对于 r ,只要记录遇到过左边界的 r 里有多少个每填即可。

所以 dp[ i ][ j ][ k ] 表示第 i 列,空下 j 列,有 k 个遇到过的 r 没填的方案数。

注意一列可以不填!所以这一列不填或者填 l 这两种状态不要混起来,最好分开算。

注意不仅4个转移都要乘上选 l 的排列,它们自己都有自己的方案数!!!特别是这一列填 l 的时候,要乘 l [ i ] !!!!!

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const int N=,M=,mod=1e9+;
int n,m,l[M],r[M],dp[M][M][N],A[M][M],ans;
void Up(int &x,int y){x+=y;x>=mod?x-=mod:;}
void upd(int &x){x>=mod?x-=mod:;}
void init()
{
for(int i=;i<=m;i++)A[i][]=;
for(int i=;i<=m;i++)
for(int j=;j<=m;j++)
A[i][j]=A[i-][j-]+A[i-][j],upd(A[i][j]);
for(int j=,ml=;j<=m;j++)
{
ml=(ll)ml*j%mod;
for(int i=j;i<=m;i++)
A[i][j]=(ll)A[i][j]*ml%mod;
}
}
int main()
{
scanf("%d%d",&n,&m);init();
for(int i=,u,v;i<=n;i++)
{
scanf("%d%d",&u,&v);
l[u]++;r[m-v+]++;
}
dp[][][]=;
int yl=,rd=,yr=;
for(int i=;i<=m;i++)
{
rd+=l[i-]-r[i];
for(int j=max(,l[i]-);j<=i--yl;j++)
for(int k=;k<=yr;k++)
{
if(!dp[i][j][k])continue;
if(l[i])
Up(dp[i+][j-(l[i]-)][k+r[i]],(ll)dp[i][j][k]*A[j][l[i]-]%mod*l[i]%mod);
if(j>=l[i])
Up(dp[i+][j+-l[i]][k+r[i]],(ll)dp[i][j][k]*A[j][l[i]]%mod);
if(k+r[i]&&j>=l[i])
Up(dp[i+][j-l[i]][k+r[i]-],(ll)dp[i][j][k]*A[j][l[i]]%mod*(k+r[i])%mod);
if(rd&&j>=l[i])
Up(dp[i+][j-l[i]][k+r[i]],(ll)dp[i][j][k]*A[j][l[i]]%mod*rd%mod);
}
yl+=l[i];yr+=r[i];
}
for(int i=;i<=m;i++)ans+=dp[m+][i][],upd(ans);
printf("%d\n",ans);
return ;
}

51nod 1327 棋盘游戏——延迟决策的dp的更多相关文章

  1. 51Nod 1327 棋盘游戏 —— 延迟DP

    题目:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1327 看博客:https://www.cnblogs.com/Na ...

  2. [ 51Nod 1327 ] 棋盘游戏

    \(\\\) \(Description\) 给出一张\(N\times M\)的棋盘,每个格子最多放置一个棋子,一个合法的放置方案需满足: 每列至多放置一个棋子 对于第\(i\)行,前\(L_i\) ...

  3. 51nod 1293 球与切换器 | DP

    51nod 1293 球与切换器 | DP 题面 有N行M列的正方形盒子.每个盒子有三种状态0, -1, +1.球从盒子上边或左边进入盒子,从下边或右边离开盒子.规则: 如果盒子的模式是-1,则进入它 ...

  4. 51Nod 1450 闯关游戏 —— 期望DP

    题目:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1450 期望DP: INF 表示这种情况不行,转移时把不行的概率也转 ...

  5. 51nod 1412 AVL树的种类(dp)

    题目链接:51nod 1412 AVL树的种类 开始做的时候把深度开得过小了结果一直WA,是我天真了.. #include<cstdio> #include<cstring> ...

  6. 51nod 1051 最大子矩阵和(dp)

    题目链接:51nod 1051 最大子矩阵和 实质是把最大子段和扩展到二维.读题注意m,n... #include<cstdio> #include<cstring> #inc ...

  7. BZOJ4426 :最大生产率(贪心+决策单调性DP)

    题意:给出N个人,现在让你分P组,每组的工作效率是最小结束时间-最大开始时间,要求每一组的效率的正数,求最大效率和.N<1000 思路: 把包含至少一个其他的分到A组:否则到B组. A组的要么单 ...

  8. CF321E Ciel and Gondolas 【决策单调性dp】

    题目链接 CF321E 题解 题意:将\(n\)个人分成\(K\)段,每段的人两两之间产生代价,求最小代价和 容易设\(f[k][i]\)表示前\(i\)个人分成\(k\)段的最小代价和 设\(val ...

  9. HYSBZ 1010 玩具装箱toy (决策单调DP)

    题意: 有n个玩具,要将它们分为若干组,玩具长度C可能不同.给出n个玩具的摆放顺序,连续的任意多个玩具都可以成为一组.区间[i,j]成为一组的费用是cost=(j-i+Sigma(Ck)-L)2且i& ...

随机推荐

  1. HDU 5304(Eastest Magical Day Seep Group&#39;s Summer-环加外向树生成树计数)[Template:Kirchhoff矩阵]

    Eastest Magical Day Seep Group's Summer Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 655 ...

  2. css3 position fixed居中的问题

    通常,我们要让某元素居中,会这样做: #element{ margin:0 auto; } 假设还想让此元素位置固定呢?一般我们会加入position:fixed,例如以下: #element{ po ...

  3. (一)MVVMLight安装

    http://www.cnblogs.com/manupstairs/p/4890300.html 1.首先新建一个wpf项目 2. 安装完成即可在我们的项目中看到如下引用: 如果点击安装的时候出现: ...

  4. Oracle 【to_number】【instr】

    需求:对一个包含数字的字符串排序 search后参考了  http://www.cnblogs.com/m-cnblogs/archive/2012/03/30/2425938.html 截屏: (用 ...

  5. soap webservice

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://cnn237111.blog.51cto.com/2359144/1357029 ...

  6. Linaro/Yocto/Openwrt

    http://en.wikipedia.org/wiki/Linaro Linaro From Wikipedia, the free encyclopedia     This article ap ...

  7. 1.新手上路:Windows下,配置Qt环境

    个人体会: 我最初只是想看看C++除了"黑窗口"之外,怎么才能做一些"更好看的东西".之后在网上看到有人推荐Qt,就看了一下官网(https://www.qt. ...

  8. caffe配置Makefile.config----ubuntu16.04--重点是matlab的编译

    来源: http://blog.csdn.net/daaikuaichuan/article/details/61414219 配置Makefile.config(参考:http://blog.csd ...

  9. 左儿子右兄弟Trie UVA 11732 strcmp() Anyone?

    题目地址: option=com_onlinejudge&Itemid=8&category=117&page=show_problem&problem=2832&qu ...

  10. iOS开发-14款状态栏(StatusBar)开源软件

    本文转载至 http://mobile.51cto.com/hot-418125.htm 之前逛街看到移动做推广,有一个定位应用挺好的,合理的利用了状态栏,做了一些消息提醒和隐藏动画,自己回家就做了一 ...