AT2294 Eternal Average
\(\therefore a i\)는 마지막\(i\) 차례에\(a i\)와\(k-a i\) 개\(0\)가 합쳐진 수를 나타냅니다.
그래서 우리는\(dp[i][j]\)를 설정하여 현재 수가\(i\) 비트가 있고\(\sum {j=1}^{i}a i=j\)의 방안 수를 표시할 수 있습니다.
뻔합니다.\(dp[i][j]=\sum {t=\max(1,j-k)}^{j}dp[i-1][t]\.
상태가 올바르면\(j\equiv m(mod\k)\) 및\(-j\equiv n(mod\k)\) 및\(i*k-j\leq n\)\[\begin{align}ans+=\sum {t=\max(1,j-k)}^{j-1}dp[i-1][t]\end{align}\]\\\\(ans\)\(dpi-1][j]\\\)를 추가할 필요가 없는 이유는 무엇입니까?
이\(k\)진수의 끝은\(0\)일 수 없기 때문입니다.
만약 먼저 접두사와 가짜 답안을 누적한 다음에 끝이\(0\)인 상황을 합법적인 상황으로 바꾸는 것은 옳지 않다.
마지막으로 모범을 취하는 것을 기억해라.
#pragma GCC optimize(3)
#include
#define il inline
#define rg register
#define gi read
using namespace std;
const int O = 4e3 + 10, mod = 1e9 + 7;
template
il TT read() {
TT o = 0,fl = 1; char ch = getchar();
while (!isdigit(ch) && ch != '-') ch = getchar();
if (ch == '-') fl = -1, ch = getchar();
while (isdigit(ch)) o = o * 10 + ch - '0', ch = getchar();
return fl * o;
}
bool now;
int n, m, k, res, ans, dp[2][O];
il void Add(int & x, int y) {x += y; if (x >= mod) x -= mod;}
il void Minus(int & x, int y) {x -= y; if (x < 0) x += mod;}
int main() {
n = gi() - 1, m = gi(), k = gi() - 1;
for (int i = 1; i <= n + m; ++i) {
res = 1;
for (int j = 1; j <= m; ++j) {
if (j > k) Minus(res, dp[!now][j - k - 1]);
if (j % k == m % k && (k * i - j) % k == n % k && k * i - j <= n)
Add(ans, res);
Add(res, dp[!now][j]);
dp[now][j] = res;
j == k ? --res : 0;
}
now ^= 1;
}
printf("%d
", ans);
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.