對於此題的性質我們考慮dp
分四種情況
黑色塊在右側單調降,單調公升
還有在左側
另外我們這樣可能會記重,所以還要將重複記過的也就是邊界線是橫的和豎的
然後還要將全白全黑加上
1 #include2view code#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 }
模擬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個 則...