Description
Input
Output
Sample Input
7 3
Sample Output
4
Data Constraint
Hint
Soution
类似第二类????????数的,我们将方案分成两种:1.至少包含一个 1 的;2.一个 1 都不包含。
设?[?][?]表示答案,那么表示 1.的答案即为?[? − 1][? − 1],表示 2.的答案 即为?[? − ?][?](相当于把每个数都加上1),所以有:
?[?][?] = ?[? − 1][? − 1] + ?[? − ?][?]
1 #include<cstdio> 2 #define N 998244353 3 using namespace std; 4 int n,k,ans,f[6000][6000]; 5 int min(int x,int y) 6 { 7 if (x>y) return y; 8 return x; 9 } 10 int main() 11 { 12 scanf("%d%d",&n,&k); 13 for (int i=1;i<=n;i++) 14 f[i][1]=1; 15 for (int i=2;i<=n;i++) 16 for (int j=2;j<=min(i,k);j++) 17 f[i][j]=(f[i-1][j-1]+f[i-j][j])%N; 18 printf("%d",f[n][k]); 19 }