放苹果组合问题--DP实现

放苹果

http://www.nowcoder.com/questionTerminal/bfd8234bb5e84be0b493656e390bdebf

放苹果组合问题--DP实现

初始状态转移矩阵dp[n][m],dp[i][j]表示i个盘子放j个苹果的放法;

状态转移方程为图片说明

#include<iostream>
#include<vector>
using namespace std;

int putapples(int m, int n){
    if(!(m >=0 && m <=10)) return -1;
    if(!(n >=1 && n <=10)) return -1;
    if(1 == n) return 1;
    if(m <= 1) return 1;
    if(m <= n) n = m;
    vector<vector<int>> dp(n+1, vector<int>(m+1, 0));
    dp[1] = vector<int>(m+1, 1);
    for(int i = 1; i <= n; ++i) dp[i][0] = dp[i][1] = 1;
    for(int i = 2; i <= n; ++i){
        for(int j  = 2; j <= m; ++j){
            dp[i][j] = dp[i-1][j] + (j-i < 0 ? 0:dp[i][j-i]);    
        }
    }
    return dp[n][m];
}

int main() 
{ 
int m,n; 
while(cin>>m>>n)
{ 
cout<<putapples(m,n)<<endl;
} 
return 0; 
}
全部评论
dp[i][j]可以分解为至少1个盘子不放苹果和所有盘子都放至少1个苹果这2种子情况
1
送花
回复
分享
发布于 2023-01-12 10:57 浙江
怎么保证去除重复摆放的情况了?
点赞
送花
回复
分享
发布于 2022-07-21 11:34
秋招专场
校招火热招聘中
官网直投

相关推荐

点赞 评论 收藏
转发
54 5 评论
分享
牛客网
牛客企业服务