题解 | #放苹果#

放苹果

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

import java.util.; import java.io.;

public class Main{ public static void main(String[] args) {

    final InputStreamReader reader = new InputStreamReader(System.in);

    try (final BufferedReader br = new BufferedReader(reader)) {

        final String[] split = br.readLine().split(" ");
        int m=Integer.parseInt(split[0]);
        int n=Integer.parseInt(split[1]);

        System.out.println(count(m,n));


    }catch (IOException e ){
        System.out.println(e.getMessage());
    }
}
public static int count (int m,int n ){
    /*
    * dp[m-n][n] : 每个盘至少有一个苹果
    * dp[m][n-1] : 至少有一个盘没有苹果
    * dp[m][n] : 当前状态下排列情况
    *
    * 状态转移方程
    *   苹果大于盘子: dp[m][n] = dp[m-n][n] + dp[m][n-1];
    *   苹果小于盘子: dp[m][n] =dp[m][n-1]
    * */




    int[][] dp = new int[m+1][n+1];
    //初始化只有一个盘子的情况
    for (int i = 0 ;i<= m;i++){
        dp[i][1]=1;
    }
    //初始化没有苹果的情况
    for (int i=0;i<=n;i++){
        dp[0][i]=1;
    }

    for (int i = 1 ;i<=m ;i++){

        for (int j = 2 ; j<=n ; j++){
            //苹果大于盘子
            if (i>=j) {
                dp[i][j] = dp[i-j][j]+dp[i][j-1];
            }else {
                dp[i][j] = dp[i][j-1]; 
            }

        }

    }
    return  dp[m][n];

}

}

全部评论

相关推荐

不愿透露姓名的神秘牛友
2025-12-04 21:05
点赞 评论 收藏
分享
01-04 07:53
门头沟学院 C++
心愿便利贴:工作了以后回头再看待这个问题,从客观的视角来讲是因为每个人对自己的要求不同,学习好的人对自己的要求很高,所以觉得考不好就天塌了,认为自己学习好并且值得一份好工作的人也是一样,找不到符合自己预期的工作肯定也会觉得是侮辱,牛客上有很多名校大学生,肯定会存在这种好学生心态啊,“做题区”从来都不是贬义词,这是大部分普通人赖以生存的路径,这个有什么好嘲讽的,有“好学生心态”没有错,但是不要给自己太大的压力了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务