P8386 [PA2021] Od deski do deski 题解
platelett 讲的题欸。
先考虑给定序列怎么做。
问题显然可以转化为能否将序列分成若干个子序列。令
建立一个辅助数组
设
发现影响能否删完的
定义
最后的答案就是
时空复杂度均为
代码:
const int N = 3e3 + 10, mod = 1e9 + 7;
int add(int x, int y){ return (x + y) % mod; }
int n, m;
int f[N][N][2];
int main() {
cin >> n >> m;
f[1][1][0] = m;
for (int i = 2; i <= n; ++i) for (int j = 1; j <= n; ++j) {
f[i][j][0] = add(f[i - 1][j][0] * 1ll * (m - j) % mod, j ? f[i - 1][j - 1][1] * 1ll * (m - j + 1) % mod : 0),
f[i][j][1] = add(f[i - 1][j][0], f[i - 1][j][1]) * 1ll * j % mod;
}
int ans = 0;
for (int i = 1; i <= n; i++)
ans = add(ans, f[n][i][1]);
cout << add(ans, mod) << "\n";
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端