模擬8 23 陰陽 DP

2022-05-06 22:42:09 字數 1745 閱讀 2299

對於此題的性質我們考慮dp

分四種情況

黑色塊在右側單調降,單調公升

還有在左側

另外我們這樣可能會記重,所以還要將重複記過的也就是邊界線是橫的和豎的

然後還要將全白全黑加上

1 #include2

#define maxn 2100

3#define int long long

4using

namespace

std;

5int f[5

][maxn][maxn];

6int sum[5

][maxn][maxn];

7int

n,m;

8const

int mod=1e9+7;9

char

c[maxn][maxn];

10int jud[2

][maxn][maxn];

11int jud_sum[2

][maxn][maxn];

12void work(int k,int

cal)

1323

for(int j=0;j<=m;++j)

2428

if(j==0)29

if(jud[cal][i][j]||jud[cal^1][i][m])

30 f[k][i][j]=sum[k][i-1][j]%mod;

31//

printf("f[%lld][%lld][%lld]=%lld\n",k,i,j,f[k][i][j]);32}

33}34 f[k+1][0][0]=1;35

for(int i=1;i<=n;++i)//

黑色單公升靠左

3642

for(int j=0;j<=m;++j)

4351}52

}53int ans=0;54

int get_sum(int k,int x1,int y1,int x2,int

y2)55

59void

work2()

6067}68

for(int i=0;i<=n;++i)

6974}75

for(int i=0;i<=m;++i)

7681}82

for(int i=0;i<=m;++i)

8388

}

89if(get_sum(1,1,1,n,m)==0)ans++;

90if(get_sum(0,1,1,n,m)==0)ans++;91}

92signed main()

93105

if(c[i][j]=='w')

106}

107}

108 work(1,1

);109 work(3,0

);110

for(int k=1;k<=4;++k)

111117

}118

//printf("初ans=%lld\n",ans);

119work2();

120 printf("

%lld\n

",ans%mod);

121 }

view code

模擬8 23 one遞推,約瑟夫

前置芝士約瑟夫問題 這樣大概就是板子問題了 考場的樹狀陣列 二分的60分暴力?1 include2 define int long long 3 define maxn 11000001 4int c maxn 5int lowbit int x intn 6 void add int x,intk...

騰訊8 23號筆試 刷木板題 DP

有n n在5000內 塊木板,寬度是1,長度不固定,這些小木板拼接起來一塊大木板。給乙個寬度為1的刷子,每刷一次可以選擇橫著刷和豎著刷,過程中都不能離開木板。問最少要刷幾次能把木板完全刷一遍。動態規劃題,dp i j dp i j dp i j 表示當前完全刷完了前iii塊木板,橫著刷的部分能延伸到...

Loi 模擬賽 貪心 模擬 DP 數論

總結 t1需要拿全分 t2棄療 t3也應該拿全分 t4應該做出70 的資料 ans的初始值一定要設大 思路 k 10時,0的個數就是n 中min 2的數量,5的數量 對n!質因數分解 n 的質因數分解詳見 一樣的思路 對k進行質因數分解,假設k的某一質因數為s,在k中有num個,在n中有cnt個 則...