放苹果

放苹果

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

思路

  1. 分组问题,要是找不到dp的状态转移,或者数学递归规律,首选dfs
    #include<iostream>
    #include<set>
    #include<string>
    #include<string.h>
    #include<algorithm>
    using namespace std;
    int visited[10];
    set<string> se;
    int m, n;
    void dfs(int apple, int plate)
    {
     if (apple ==0)/*中止条件*/
     {
         string str;
         for (int k = 0; k < n; k++)/*这个变成字符串方便去重*/
         {
             str += to_string(visited[k]);
         }
         sort(str.begin(), str.end());
         se.insert(str);/*set去重*/
         return ;
     }
     if (plate >=n) return ;/*防止有苹果没有放完的情况,苹果没有放完,但没有盘子了*/
     for (int i = 0; i <=apple; i++)/*遍历所有盘子的苹果数*/
     {
         visited[plate]=i;/*保存每个盘子放的苹果数*/
         dfs(apple - i, plate +1);/*递归*/
         visited[plate] = 0;/*回溯*/
     }
    }
    int main()
    {
     while (cin>>m>>n)
     {
         if (!(0 < m && m <= 10) || !(1 <= n && n <= 10))
             return -1;
         dfs(m, 0);
         cout << se.size() << endl;
         se.clear();
         memset(visited, 0, sizeof(visited));
     }
    

}
```

全部评论

相关推荐

最近和朋友聊天,她说了句让我震惊的话:"我发现我连周末点外卖都开始'最优解'了,一定要赶在高峰期前下单,不然就觉得自己亏了。"这不就是典型的"班味入侵"吗?工作思维已经渗透到生活的方方面面。
小型域名服务器:啊?我一直都这样啊?我还以为是我爱贪小便宜呢?每次去实验室都得接一杯免费的开水回去,出门都得规划一下最短路径,在宿舍就吃南边的食堂,在实验室就吃北边的食堂,快递只有顺路的时候才取。
点赞 评论 收藏
分享
头像
11-09 12:17
清华大学 C++
out11Man:小丑罢了,不用理会
点赞 评论 收藏
分享
ProMonkey2024:5个oc?厉害! 但是有一个小问题:谁问你了?😡我的意思是,谁在意?我告诉你,根本没人问你,在我们之中0人问了你,我把所有问你的人都请来 party 了,到场人数是0个人,誰问你了?WHO ASKED?谁问汝矣?誰があなたに聞きましたか?누가 물어봤어?我爬上了珠穆朗玛峰也没找到谁问你了,我刚刚潜入了世界上最大的射电望远镜也没开到那个问你的人的盒,在找到谁问你之前我连癌症的解药都发明了出来,我开了最大距离渲染也没找到谁问你了我活在这个被辐射蹂躏了多年的破碎世界的坟墓里目睹全球核战争把人类文明毁灭也没见到谁问你了(别的帖子偷来的,现学现卖😋)
点赞 评论 收藏
分享
5 收藏 评论
分享
牛客网
牛客企业服务