题解 | #放苹果#

放苹果

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

import java.util.Scanner;

/**
 * @author Yuri
 * @since 2021/12/15 11:06
 */
public class Main {

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int m = in.nextInt();
        int n = in.nextInt();
        int[][] dp = new int[m + 1][n + 1];
        for (int i = 0; i <= m; i++) dp[i][1] = 1; // 无论几个苹果只要有一个盘子就是一种方案
        for (int i = 1; i <= n; i++) dp[0][i] = dp[1][i] = 1; // 有一个苹果,一个以上的盘子就是一种方案,没有盘子则不算一种方案

        for (int i = 1; i <= m; i++) {
            for (int j = 1; j <= n; j++) {
                if (i < j) dp[i][j] = dp[i][i]; // 苹果<盘子 则必有j-i个盘子空着,所以其实就相当于只有i个盘子
                else dp[i][j] = dp[i][j - 1] + dp[i - j][j]; // 苹果>盘子 则分两种情况:
                // ①.至少有一个盘子空着,dp[i][j-1],因为其包含了dp[i][j-2]的结果,所以其实也涵盖了2...n-1个盘子空着的可能
                // ②.没有盘子空着,则至少每个盘子有一个苹果。dp[i-j][j]
            }
        }
        System.out.println(dp[m][n]);
    }
}

就纠正一句话,两种情况的第一种不该说是有一个盘子空着,而该说至少有一个盘子空着。

有一个盘子空着和没有盘子空着明显没包含有两个盘子空着的情况,会让人引起误解。

全部评论

相关推荐

想申请延毕了,找工作找到崩溃,越找就越想摆烂,还有25届的和我一样感受吗?
码农索隆:没事哒,好兄弟,慢慢来,调整心态,车到山前必有路,感到迷茫的时候,多抬头看看
点赞 评论 收藏
分享
点赞 评论 收藏
分享
求面试求offer啊啊啊啊:1600一个月?
点赞 评论 收藏
分享
好久没来牛客了,今天面试了一个实习生,感觉对方形象乱糟糟的,头发像鸡窝,像刚睡醒就来面试了,第一印象直接大打折扣,感觉我没有受到应有的尊重,再加上对方业务能力也一般,我直接挂掉;大家面试的时候还是好好收拾一下自己吧,争取给面试官留下个好印象,面试这东西还是存在眼缘的
MinJerous:更在乎本质,应该看候选人是否和岗位需要的能力匹配。洗脸/不洗头都无所谓吧,说不定人家刚刚通宵准备,就是为了这场面试呢?你挂掉他核心原因还是他能力不行,而不是形象。就算形象好点,能力不行你敢给过吗,不怕后面+1质疑你
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务