中國象棋(AHOI2009)

2021-08-29 18:37:44 字數 746 閱讀 8195

傳送門

簡單思路:dp

用f[i][j][k]表示前i行有j列放了乙個子,有k列放了兩個子

轉移,只要列舉每一行的放置情況即可,有:不放、在空列放乙個,在有乙個子的列放乙個,在兩個空列各放乙個,在兩個一子列各放乙個,在空列和一子列各放乙個。

列舉ijk即可,最後求和

注意:逆元只有在進行除法前需要取模時才需要,否則不需要。

**如下:

#include

#include

#include

using

namespace std;

const

long

long mod=

9999973

;int n,m;

long

long f[

105]

[105][

105]

;int

main()

if(j>=1)

if(j>=

1&& m-j-k>=1)

if(m-j-k>=2)

if(j>=2)

}}}}

long

long ans=0;

for(

long

long j=

0;j<=m;j++)}

printf

("%lld"

,ans)

;return0;

}

中國象棋 AHOI2009

這次小可可想解決的難題和中國象棋有關,在乙個n行m列的棋盤上,讓你放若干個炮 可以是0個 使得沒有乙個炮可以攻擊到另乙個炮,請問有多少種放置方法。大家肯定很清楚,在中國象棋中炮的行走方式是 乙個炮攻擊到另乙個炮,當且僅當它們在同一行或同一列中,且它們之間恰好 有乙個棋子。你也來和小可可一起鍛鍊一下思...

AHOI2009中國象棋

狀態很難想。本題難就難在如何定狀態。再看題解之前,我一點思路也沒有。看到題解的狀態表示後,我立刻知道怎麼做了。f i j k 表示至第i行,有j列放1個,有k列放2個。這樣f i j k 即為第i行不放 放1個 放2個的數量總和。狀態轉移方程很長,用到組合的相關知識。i 1時需特殊處理。詳見 inc...

AHOI2009 中國象棋

題目描述 這次小可可想解決的難題和中國象棋有關,在乙個n行m列的棋盤上,讓你放若干個炮 可以是0個 使得沒有乙個炮可以攻擊到另乙個炮,請問有多少種放置方法。大家肯定很清楚,在中國象棋中炮的行走方式是 乙個炮攻擊到另乙個炮,當且僅當它們在同一行或同一列中,且它們之間恰好 有乙個棋子。你也來和小可可一起...