-->
当前位置:首页 > 题库 > 正文内容

程序填空题:求解整数拆分问题(动态规划法)

Luz4年前 (2021-05-10)题库1637
求解整数拆分问题。求将正整数n无序拆分成最大数为k(称为n的k拆分)的拆分方案个数,要求所有的拆分方案不重复。

```c++
#include
#include
#define MAXN 500
using namespace std;
int dp[MAXN][MAXN]; //动态规划数组
void Split(int n,int k) //求解算法
{
for (int i=1;i<=n;i++)
for(int j=1;j<=k;j++)
{
if (i==1 || j==1)
@@[dp[i][j]=1](2);
else if (i @@[dp[i][j]=dp[i][i]](2);
else if (i==j)
@@[dp[i][j]=dp[i][j-1]+1](2);
else
dp[i][j]=@@[dp[i][j-1]+dp[i-j][j]](2);
}
}

int main()
{
int n,k;
cin>>n>>k;
Split(n,k);
cout< return 0;
}
```
### 输入格式:

第一个为正整数n,第二个数为拆分最大数k。

```in
5 5
```

### 输出格式:

输出拆分方案数。

```out
7
```







答案:
第1空:dp[i][j]=1

第2空:dp[i][j]=dp[i][i]

第3空:dp[i][j]=dp[i][j-1]+1

第4空:dp[i][j-1]+dp[i-j][j]

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。