31. 粉刷匠
阿新 • • 發佈:2018-12-26
Description
龍神認為宿舍的牆上一片白不太好看,所以決定給牆塗上顏色。
龍神有種顏色的顏料(顏料中沒有白色且互不相同),分別編號為第種顏色。每一種顏色的顏料多到用不完。我們認為白色是,牆的高度不計(???)。龍神給牆塗色是很講究的,每次只能選牆上全白的一段染色,也就是不能和已經染的顏色段有交集。同時,還要求每次染的一段只能是一些連續的整單位的牆,並且寬度不小於
#include "stdio.h" long long f[2005][2]; int main(int argc, char const *argv[]) { int t; scanf("%d",&t); while(t--){ int n, m, k; scanf("%d%d%d", &n, &m, &k); for (int i = 0; i <= n + 1; i++){ f[i][0] = 0; f[i][1] = 0; } f[1][0] = 1; if(k == 1){ f[1][1] = m; } else { f[1][1] = 0; f[k][1] = m; } for (int i = 2; i <= n; i++){ if(i == k){ f[i][0] = (f[i - 1][0]%998244353 + f[i - 1][1]%998244353)%998244353; f[k][1] = m; continue; } else{ f[i][0] = (f[i - 1][0]%998244353 + f[i - 1][1]%998244353)%998244353; if(i < k){ f[i][1] = f[i - 1][1]%998244353; } else{ f[i][1] = (f[i - 1][1]%998244353+f[i - k][0]%998244353 * m+f[i - k][1]%998244353 * (m - 1))%998244353; } } } printf("%lld\n", (f[n][0]%998244353+f[n][1]%998244353)%998244353); } return 0; }