放苹果-详解+BUG

放苹果

http://www.nowcoder.com/questionTerminal/4f0c1e21010e4d849bde5297148e81d9

  • 思路

    • 设f(m, n)表示将m个苹果放到n个盘子中的方法数

    • 把问题分成两种情况

      • 盘子数n > 苹果数m :则无论怎样放必然有n - m个空盘子,这些盘子都废掉了。实际上f(m , n) = f(m , m)
      • 盘子数n <= 苹果数m: 这时候考虑到底是每个盘子都放苹果还是留至少一个空盘子。若都放,则先每个盘子都预置一个苹果,还剩m-n个苹果放到n个盘子,即f(m-n, n);若留空盘子,至少留一个,则将m个苹果放到n-1个盘子中,即f(m , n-1) 。故而f(m,n) = f(m-n, n) + f(m , n-1);
    • 边界情况

      • n = 1时, 只有一个盘子了,显然只能把所有的苹果都放在里面
      • m = 0时, 没有苹果了,那就不放了,不放本身也是一种方法。(实际上是考虑到f(m-n, n),若m=0时设置值为0,则当n = m时,不留空盘子策略f(m-n, n) = 0,这就不对了)
    • 爆搜 记忆化搜索 dp都可以解决该问题

  • BUG
    • 此题样例错误,容易让人认为先输入测试组数t,故而按照样例格式输入时能通过自测样例,在提交代码时会出现答案错误或者段错误。
  • AC CODE
#include<bits/stdc++.h>
using namespace std;

int dp[20][20];

//m个苹果放在n个盘子里
int dfs(int m, int n) {
    if (n == 1) return 1;
    if (m == 0) return 1;
    if (dp[m][n] != -1) return dp[m][n];
    if (m < n) {
        return dp[m][n] = dfs(m, m);
    }
    else {
        return dp[m][n] = dfs(m - n, n) + dfs(m, n - 1);
    }
}

int main() {
    int m, n, t;
    memset(dp, -1, sizeof dp);
    while (cin >> m >> n) {
        int k = dfs(m, n);
        cout << k << endl;
    }
}
全部评论
那么留两个空盘子的情况怎么办?
点赞 回复 分享
发布于 2021-06-05 16:15
留两个相当于n-1个里留一个,在f(m,n-1)里计算了
点赞 回复 分享
发布于 2021-07-02 14:51
兄弟这个思路真牛
点赞 回复 分享
发布于 2023-03-18 09:46 浙江

相关推荐

10-14 23:01
已编辑
中国地质大学(武汉) Java
CUG芝士圈:虽然是网上的项目,但最好还是包装一下,然后现在大部分公司都在忙校招,十月底、十一月初会好找一些。最后,boss才沟通100家,别焦虑,我去年暑假找第一段实习的时候沟通了500➕才有面试,校友加油
点赞 评论 收藏
分享
11-15 18:39
已编辑
西安交通大学 Java
全村最靓的仔仔:卧槽,佬啥bg呢,本也是西交么
点赞 评论 收藏
分享
工作基本定了,比较满意。这深度学习真是难搞啊,论文看不懂,代码看不懂,不会改,创新点???&nbsp;还有一个月中期,怎么搞,已经抑郁了,没有小论文要求,我真是非常幸运了,不然就我这科研能力…………&nbsp;感觉自己对自己失去信心,无时无刻不在否定自己取得一些成绩都是运气好罢了,真的能顺利毕业吗?严重内耗、无力感爆棚啊…………
AI牛可乐:哎呀,听起来你最近压力好大呀,毕业论文和工作的双重压力一定让你感觉像是背了两座山呢。深度学习确实挺复杂的,就像是要在一片迷雾中找到出路一样。但是,你已经很棒了,工作都定好了,这是很大的成就呢! 论文的事情,别太担心。每个人都有看不懂代码和论文的时候,这是正常的。至于创新点嘛,有时候灵感就像小猫一样,需要一点一点地哄出来的。你可以先试试把你看过的资料整理一下,说不定就能找到新的思路呢。 中期答辩前,你可以列个计划,一步一步来,把大问题分解成小问题,一点一点克服。记得,你不是一个人在战斗,你的导师、同学都是你的战友哦。 至于信心嘛,别否定自己,每个人都会有低谷的时候。你已经取得的成绩,都是你实力的体现。毕业不是问题,只要你不放弃,就一定能顺利走过去的。加油哦,我相信你可以的! 对了,如果你愿意的话,可以点击我的头像,我们私信聊,也许我能帮你出出主意,或者就是简单地聊聊天,分散一下你的注意力也好呀。🐮💪🌟
点赞 评论 收藏
分享
32 1 评论
分享
牛客网
牛客企业服务