這個題考慮組合數的實際意義,可以將題意轉化為從\(nk\)個數裡面選\(m\)個數\((m\%k=r)\)的方案數
這個可以\(dp\)求解
設\(f[i][j]\)表示前\(i\)個數選出\(j\)個數(\(j\)是對於\(k\)取mod後的)的方案數
顯然有\(f[i][j]=f[i-1][j]+f[i-1][(j-1+k)\%k]\)
可以發現\(i\)狀態之和\(i-1\)狀態有關,所以可以矩陣加速轉移
**:
#include#include#include#includeusing namespace std;
void read(int &x)
#define rg register
const int maxn=1e4+10;
int n,mod,k,r;long long tot,f[100],a[100][100],b[100][100],g[100];
int main()
printf("%lld\n",f[r]);
}
Bzoj4870 SHOI2017 組合數問題
題目顯得一臉不可做。一般的來說,讀題是不會看前面一些沒有什麼太大意義的話的。確實也如此,譬如題面首句 組合數cm n 表示的是從n個互不相同的物品中選出m個的方案數 想來大家也是知道的 再觀察前面的式子 可以表示成如下形式 q modk rcq n k 回顧題面首句 代入?可以得到講人話的題面,大致...
bzoj4870 Shoi2017 組合數問題
time limit 10 sec memory limit 512 mb submit 747 solved 397 submit status discuss 第一行有四個整數 n,p,k,r,所有整數含義見問題描述。1 n 10 9,0 r k 50,2 p 2 30 1 一行乙個整數代表答案...
Bzoj3562 神器化合物 Shoi 2014
ac通道 分析 若把每乙個原子看作乙個節點,將化學鍵看作一條邊,那麼這個題目要求的 分子的個數 很容易就可以看出是求圖中聯通塊的個數。求聯通塊的個數,可以使用並查集。可如何求出每一步的聯通塊的個數呢?可以知道,當連上一條邊時,若此邊連線的是兩個不同的聯通塊,那麼分子個數就會減一 當刪去一條邊時,若刪...