hihocoder 1191 小W與網格 (組合數)
時間限制:1000ms
單點時限:1000ms
記憶體限制:256MB
描述
給定一個n*m的網格,左上角(1, 1),右下角(n, m)。
小w在(i, j),他會從"上左下右"四個方向中選定兩個不同但正交的方向,然後他只能沿著這兩個方向走,直到他走出網格。
小w想知道有多少種不同的走法。
兩個走法不同當且僅當所經過的格子的集合不同。
輸入
輸入包含多組資料。
每組資料一行四個整數n, m, i, j。(1 <= i <= n <= 100, 1 <= j <= m <= 100)
輸出
對於每組資料,輸出一個整數表示方案數,答案對1000000007取模。
樣例解釋
無論怎麼走,要麼覆蓋一格,要麼覆蓋兩格。
題目連結:http://hihocoder.com/problemset/problem/1191
題目分析:又是這種方格里面走路方案數的問題,任意兩格(x1, y1) ,(x2, y2)間走路的方案數為c[abs(x1 - x2)][abs(x1 - x2) + abs(y1 - y2)],c是組合數,那麼對於這題,我要求的就是(i,j)這個點到四邊的方案數和,列舉一下邊界用上面的公式算就可以了
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int const MAX = 205;
int const MOD = 1e9 + 7;
int c[MAX][MAX];
void pre()
{
c[0][0] = 1;
for(int i = 1; i <= 200; i++)
{
c[i][0] = 1;
for(int j = 1; j <= 200; j++)
c[i][j] = (c[i - 1][j] % MOD + c[i - 1][j - 1] % MOD) % MOD;
}
}
int main()
{
int n, m, i, j;
pre();
while(scanf("%d %d %d %d", &n, &m, &i, &j) != EOF)
{
int ans = 0;
for(int x = 1; x <= n; x++)
{
for(int y = 1; y <= m; y++)
{
if(x == 1 || x == n || y == 1 || y == m)
{
int xx = abs(x - i);
int yy = abs(y - j);
ans = (ans % MOD + c[xx + yy][xx] % MOD) % MOD;
}
}
}
printf("%d\n", ans);
}
}
相關文章
- 《小 學 組 合 數 學》
- 組合數學筆記-排列與組合筆記
- 【數學】組合數學 - 排列組合
- 服務網格GCP (GKE, Istio, MSA) 搖滾組合GC
- 組合數學
- 組合數問題
- lg組合計數
- 組合數字首和
- LInux 組合命令小結Linux
- 繼承與組合繼承
- 常見規格排列組合問題
- hdu 4546 優先佇列 數列組合和第m小佇列
- 【數學】組合數學 - 卡特蘭數
- Python引數組合Python
- 【組合數學】組合數學簡介 ( 組合思想 2 : 數學歸納法 | 數學歸納法推廣 | 多重歸納思想 )
- 【演算法學習筆記】組合數與 Lucas 定理演算法筆記
- 不學無數——組合模式模式
- 計算組合數 (sdut oj)
- 組合計數思維題
- CF938E-組合數
- 組合數學 XKerror 筆記Error筆記
- 動態合批與靜態合批的網格記憶體佔用記憶體
- Unity網格合併_材質合併[轉]Unity
- 【POJ 2249】 Binomial Showdown 組合數學 排列組合計算
- 組合數學筆記-特殊計數數列筆記
- 10大字型與網頁設計組合案例欣賞網頁
- HihoCoder#1513 : 小Hi的煩惱(五維數點 bitset 分塊)
- 索引與null(二):組合索引索引Null
- 組合模式-統一的處理個別物件與組合物件模式物件
- Redux實現組合計數器Redux
- 【總結】求組合數的方法
- Python 函式(引數組合)Python函式
- 【學習筆記】組合數學筆記
- 組合數學水題 $19$ 道
- 組合數學學習筆記筆記
- [C++] template+struct 組合使用小技巧C++Struct
- 組合數取模的幾種方法--Exlucas&楊輝三角&組合
- 一本組合學習題集——《組合問題與練習》