noi7219 复杂的整数划分问题
2024-10-09 02:50:49
#include <bits/stdc++.h>
using namespace std;
const int maxn = ;
int dp1[maxn][maxn], dp2[maxn][maxn], dp3[maxn][maxn], dp4[maxn][maxn];
void init() {
for (int n = ; n <= ; n++) {
for (int k = ; k <= ; k++) {
if (n == k) dp1[n][k] = ;
else if (n < k) dp1[n][k] = ;
else dp1[n][k] = dp1[n-k][k]+dp1[n-][k-];
}
} for (int n = ; n <= ; n++) {
dp2[n][] = n== ? : ;
for (int m = ; m <= ; m++) {
if (n < m) dp2[n][m] = dp2[n][n];
else if (n == m) dp2[n][m] = dp2[n][m-]+;
else dp2[n][m] = dp2[n][m-]+dp2[n-m][m-];
}
} for (int n = ; n <= ; n++) {
dp3[n][] = (n%), dp4[n][] = (n%==);
dp3[n][] = dp3[n][];
for (int m = ; m <= ; m++) {
if (n < m) dp3[n][m] = dp4[n][m] = ;
else if (n == m) dp3[n][m] = , dp4[n][m] = ;
else {
dp3[n][m] = dp3[n-][m-]+dp4[n-m][m];
dp4[n][m] = dp3[n-m][m];
}
dp3[n][] += dp3[n][m];
}
}
}
int main() {
init();
int n, k;
while (cin >> n >> k) {
cout << dp1[n][k] << endl;
cout << dp2[n][n] << endl;
cout << dp3[n][] << endl;
}
return ;
}
最新文章
- 在tmux中的vi 上下左右键变为了ABCD等字符
- .net(C#)中this关键字
- MVC中的成员资格,授权,安全性
- 时间日期----java
- EMS电子面单接口对接使用-免费版
- 递归---NYOJ-90整数划分(一)
- 初次接触VC++载入自己定义LIB 即静态链接
- 列表标题栏添加CheckBox(自定义HanderView的时候实现)
- iOS数据持久化之数据库:SQLite和FMDB
- Visual Studio 2017正式版离线安装及介绍
- python jason,pickle
- 教小朋友学Linux
- Kotlin 扩展——省略findViewById
- DDoS攻击与防御(4)
- 关于 HTTP GET/POST 请求参数长度最大值的一个理解误区(转载)
- burpsuite的使用(二)
- 必修3第三章概率mindmaps
- spring单元测试的基本配置
- 跟浩哥学自动化测试Selenium -- Selenium简介 (1)
- 洛谷 P2258 子矩阵