題目:
看部落格:
思路就是按列dp,如果不是必須填就先空下這一列,記錄一下目前有多少可用的空列,遇到乙個 l 的結束時就從中選一些列放上棋子,並乘個排列;
對於 r,方案數在當前列體現,所以要記錄當前列可填的位置;
注意別漏了狀態,當前可轉移的狀態是填 l,填 r,不填,填在不是 l 也不是 r 的地方四種轉移;
還有各種細節...全仰仗 narh 提點;
呆滯了半小時...一對拍就發現...在算 a 的地方別忘了寫 (ll) !!!
好題啊!
**如下:
#include#include#include
#include
using
namespace
std;
typedef
long
long
ll;int
const xn=55,xm=205,mod=1e9+7
;int
n,m,l[xn],r[xn],f[xm][xm][xm],jc[xm],jcn[xm],sl[xm],sr[xm];
intrd()
while(ch>='
0'&&ch<='
9')ret=(ret<<3)+(ret<<1)+ch-'
0',ch=getchar();
return f?ret:-ret;
}ll pw(ll a,
intb)
void
init()
int a(int n,int m)//
(ll)!!!
void upt(int &x,int y)
intmain()
int ans=0;
for(int j=0;j<=m-2*n;j++)upt(ans,f[m][j][n]);
//,printf("f[%d][%d][%d]=%d\n",m,j,n,f[m][j][n]);
printf("
%d\n
",ans);
return0;
}
51nod 1327 棋盤遊戲
有乙個n行m列的棋盤,即該棋盤被分為n m格。現在向棋盤中放棋子,每個格仔中最多放乙個棋子,也可以乙個不放。放完棋子後需要滿足如下要求 1 對於第i行來說,其從左往右的前left i 個格仔 即最左側的left i 個連續的格仔 中恰好一共有1個棋子 2 對於第i行來說,其從右往左的前right i...
棋盤遊戲 51Nod 1327
題解 在放置棋子時僅僅要求左右滿足條件與n的順序無關,考慮乙個二維dp陣列,dp i j 代表放到了第i列還有j列沒有放棋子,但是這個二維dp沒有維護右限的資訊,所以考慮增加一維代表有多少行到達了右限但沒有棋子,將l和r區間的限制統計,可以得到dp轉移方程 dp a 1 b 1 l a 1 c r ...
51nod1327 棋盤遊戲 dp
description 有乙個n n 行m role presentation style position relative m m列的棋盤,即該棋盤被分為n m n m 格。現在向棋盤中放棋子,每個格仔中最多放乙個棋子,也可以乙個不放。放完棋子後需要滿足如下要求 1 1 對於第i行來說,其從左往...