題目描述:傳送門
一看這題首先想到設d(
i,j,
k1,k
2,0)
表示在小a剛吸完i,j這個位置的魔液,小a和uim的魔瓶的魔液量分別為k1,k2時的方案數,d(
i,j,
k1,k
2,1)
表示在uim剛吸完……的方案數。
但是這樣明顯會爆記憶體…於是我就一直卡著了。後來看到討論區有差這個字,才想到把狀態減少到d(
i,j,
k,0)
和d(i
,j,k
,1) 其中k為 小a的魔瓶量與uim的魔瓶量之差.
另外我用的是順推,感覺更好想。
**
#include
#include
#include
#include
#include
using
namespace
std;
const
int mo=1e9+7;
int n,m,k,d[800][800][16][2],a[800][800];
int main()
for(int i=0;ifor(int j=0;jfor(int u=0;u<=k;u++)
if(j+1
1]; if(k1>k) k1-=(k+1);
d[i][j+1][k1][0]=(d[i][j+1][k1][0]+d[i][j][u][1])%mo;
k1=u-a[i][j+1];
if(k1<0) k1+=(k+1);
d[i][j+1][k1][1]=(d[i][j+1][k1][1]+d[i][j][u][0])%mo;}}
int ans=0;
for(int i=0;ifor(int j=0;j0][1])%mo;
cout
0;}
luogu P1373 小a和uim之大逃離
這是一道求方案數的題。我很菜,不太會寫方案數的題,所以看了下題解,並寫下這篇部落格。首先,我們是在乙個n m的格仔裡走,有兩種走法,乙個是向右,乙個是向下。起點任意,終點任意。在你走的路徑上,第奇數個點是小a取走其中的液體,第偶數個點是uim取走其中的液體,必須走偶數個點。我們所要求的是,走到終點後...
LUOGU P1373 小a和uim之大逃離 題解
小a和uim來到雨林中探險。突然一陣北風吹來,一片烏雲從北部天邊急湧過來,還伴著一道道閃電,一陣陣雷聲。剎那間,狂風大作,烏雲布滿了天空,緊接著豆大的雨點從天空中打落下來,只見前方出現了乙個披頭散髮 青面獠牙的怪物,低沉著聲音說 呵呵,既然你們來到這,只能活下來乙個!小a和他的小夥伴都驚呆了!瞬間,...
luogu P1373 小a和uim之大逃離
小a和uim來到雨林中探險。突然一陣北風吹來,一片烏雲從北部天邊急湧過來,還伴著一道道閃電,一陣陣雷聲。剎那間,狂風大作,烏雲布滿了天空,緊接著豆大的雨點從天空中打落下來,只見前方出現了乙個披頭散髮 青面獠牙的怪物,低沉著聲音說 呵呵,既然你們來到這,只能活下來乙個!小a和他的小夥伴都驚呆了!瞬間,...