C++动态规划版

#include<iostream>

using namespace std;

int dp[201][7];

int main() {
    int n, k;

    cin >> n >> k;

    for(int i = 1; i <= n; i++) {
        for(int j = 1; j <= k; j++) {
            if( j > i ) {
                // 无法将i分成大于i份
                dp[i][j] = 0;
            } else if( 1 == j || i == j) {
                // i个数分为1份和个数分为i份情况只有一种
                dp[i][j] = 1;
            } else {
                // 这里分为两种情况考虑:含1还是不含1
                dp[i][j] = dp[i - 1][j - 1] + dp[i - j][j];
            }
        }
    }

    cout << dp[n][k];
}
全部评论
    for(inti =1; i <= n; i++) {         dp[i][1] =1;     }     for(inti =1; i <= n; i++) {         dp[i][i] =1;     } 感谢题解,不过代码有点小问题,两个for循环多余,做的事情在下面重复了,而且第二个for循环dp[i][i]数组越界😅
点赞 回复 分享
发布于 2019-06-07 11:47

相关推荐

10-07 20:48
门头沟学院 Java
听说改名就会有offer:可能是实习上着班想到后面还要回学校给导师做牛马,看着身边都是21-25的年纪,突然emo了了
点赞 评论 收藏
分享
5 收藏 评论
分享
牛客网
牛客企业服务