結果
問題 |
No.535 自然数の収納方法
|
ユーザー |
![]() |
提出日時 | 2025-03-17 21:35:47 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 64 ms / 2,000 ms |
コード長 | 1,072 bytes |
コンパイル時間 | 1,774 ms |
コンパイル使用メモリ | 161,516 KB |
実行使用メモリ | 66,492 KB |
最終ジャッジ日時 | 2025-03-17 21:35:51 |
合計ジャッジ時間 | 3,574 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 23 |
ソースコード
#include <bits/stdc++.h> #define int long long //#define USE_FREOPEN //#define MUL_TEST #define FILENAME "number" using namespace std; constexpr int mod = 1e9 + 7; int dp[2005][2005],sum[2005][2005]; void solve() { int n; cin >> n; auto dodp = [&]() -> void { for (int i = 1; i < n; i++) { sum[i - 1][0] = 0; for (int j = 1; j <= n; j++) sum[i - 1][j] = (sum[i - 1][j - 1] + dp[i - 1][j]) % mod; for (int j = 1; j <= n; j++) dp[i][j] = sum[i - 1][min(n,j + max(1ll,i - 1) - 1)]; } }; memset(dp,0,sizeof(dp)); for (int i = 1; i <= n; i++) dp[0][i] = 1; dodp(); int ans = 0; for (int i = 1; i <= n; i++) ans = (ans + dp[n - 1][i]) % mod; memset(dp,0,sizeof(dp)); dp[0][1] = 1; dodp(); ans = (ans - dp[n - 1][n] + mod) % mod; cout << ans << '\n'; } signed main() { ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); #ifdef USE_FREOPEN freopen(FILENAME ".in","r",stdin); freopen(FILENAME ".out","w",stdout); #endif int _ = 1; #ifdef MUL_TEST cin >> _; #endif while (_--) solve(); _^=_; return 0^_^0; }