蓝桥杯——算法训练 未名湖边的烦恼_weixin_33690963的博客-程序员秘密

1、我自己的提交到练习系统的代码思路:

  (1)如果m < n,0种方案;

  (2)把m个还鞋子的人写成m个1,那么,每个1的后面,就是借鞋子的人的个数;

  (3)那么,一开始 ,可借鞋子数组a[] = {1, 2, 3, 4, ……, m};

  (4)对于第i个1后面的位置,可以允许借的鞋子的数量范围为:0~a[i];

  (5)当在第i个1后面的位置借走j双鞋子后,从i开始,一直到m(注意,口述里面下标都是从1开始的),a数组中所有的元素都要减j;

  (6)接下来,递归:去第i + 1个位置借鞋子,还需要借鞋子的人数减j;

  (7)如果当前需要借鞋子的人数为0,返回1;如果当前在第m个1后面的位置,返回1(因为此时肯定m>=n,到这个位置时,肯定鞋子够借);

  (8)记忆化。这一点,我一开始没有做。跑了一下最大的样例,18, 18,自己电脑上跑了几分钟还没结果,交上去也能过,只能说明数据太水了。

    记忆化的思路是,还鞋子的人m,当前借鞋子的位置(在哪个1后面),还有多少人需要借鞋子,这三者可唯一确定一个状态,搜索的时候记忆化。

2、代码如下:

/**
不“记忆化”都能过,只能说明,数据太水了。
*/
#include<bits/stdc++.h>
using namespace std;
int m, n;
int dp[20][20][20];
int solve(int idx, vector<int> vec, int left) {
    if(idx == vec.size() - 1)return 1;
    if(left <= 0)return 1;
    if(dp[m][idx][left] != -1)return dp[m][idx][left];
    int ans = 0;
    for(int j = 0; j <= vec[idx]; ++j) {
        if(left >= j) {
            vector<int> nvec(vec);
            for(int k = idx, sz = nvec.size();k < sz;++k) {
                nvec[k] -= j;
            }
            ans += solve(idx + 1, nvec, left - j);
        }
    }
    dp[m][idx][left] = ans;
    return ans;
}

int main() {
    while(~scanf("%d%d", &m, &n)) {
        memset(dp, -1, sizeof(dp));
        if(m < n) {
            printf("0\n");
            continue;
        }
        vector<int> vec;
        for(int i = 1; i <= m; ++i)vec.push_back(i);
        printf("%d\n", solve(0, vec, n));
    }
    return 0;
}

3、过了之后,网上再去看看别人的解法,递推方程很简单。就是:

  (1)如果m < n,返回0;表示,这种状态没有一个有效的方案;

  (2)如果n = 0,返回1;表示,所有人都借完鞋子了,这是一种有效的方案;

  (3)否则的话,....................没理解,待补充.......................

4、代码网上到处都是。

 

转载于:https://www.cnblogs.com/fuzhihong0917/p/8151190.html

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_33690963/article/details/93787164

智能推荐

手机自动访问generate_204_fky1e的博客-程序员秘密

近来写WiFi钓鱼demo,需要让手机连接 WiFi 后自动跳转到指定网页,于是对手机进行dns拦截。在对手机的流量分析中发现一件很神奇的事,手机接入WiFi后会自动访问\generate_204。以下是手机接入WiFi后访问的uri,可以看到,手机多次访问\generate_204:

C#中向DataGridView中添加DataTable数据_Tiger_shl的博客-程序员秘密

将DataTable数据添加到DataGridView中一、准备DataTable数据二、将数据添加到DataGridView的数据源中,如下dataGridView.DataSource = dataTable;三、向DataGridView添加列名,顺序为DataTable中的列的顺序,也就是DataGridView中的第一列对应DataTable中的第一列,以此类推dat

java内代码规范多行注释,java代码注释与编码规范_weixin_39872395的博客-程序员秘密

代码注释与编码规范**1.代码注释​ 1.1单行注释 ”//“为单行注释标记,从符号”//“开始直到换行为止所有内容均作为注释而被编译器忽略。​ 1.2多行注释 “/* "和”*/"为多行注释标记,符号之间所有内容均为注释内容,注释内容可换行。​ 1.3文档注释 “/** */"为文档注释标记,符号之间的所有内容均为文档注释内容。注意:在多行注释中可嵌套单行注释,但在多行注释中不可嵌套多行注释。2...

新手学习编程需注意这六点_普通网友的博客-程序员秘密

学习编程的过程,大致如下:看书、看博客、学课程或者看视频等模仿着书上或者博客的代码,进行复现,复现不重要,思考才是关键 ️思考学习别人思路后,脱离书本和博客,完全自己实现功能自己实现一些 DEMO,看别人项目代码,与别人讨论,提升代码能力在别人的框架和要求下,写代码实现业务自己负责别人设计的模块的实现独立设计业务模块并开发实现负责大项目框架设计和拆分,带领别人进行开发其他高阶...

WAF和IPS的区别_ips和waf区别_陈苏漾的博客-程序员秘密

WAF和IPS的区别WAF:web应用防火墙定义位于OSI的第七层应用层,较为片面,但是有深度主要针对的协议为:FTP、HTTP、HTTPSIPS:入侵防御系统位于OSI的第三层到第七层,比较全面,但是浅为了更好的理解两款产品差异性,我们先用这个保镖(WAF)和保安(IPS)比喻来描述。大楼保安需要对所有进出大楼人员进行检查,一旦发现可疑人员则禁止他入内,但如果混进...

图片数据集介绍_我与懒惰作斗争的日子的博客-程序员秘密

文章目录1、写在前面2、数据集Caltech101介绍3、数据集Caltech256介绍4、数据集CelebA介绍5、数据集CIFAR10介绍6、数据集CIFAR100介绍7、数据集Cityspaces介绍7.1 Cityscapes数据集的特点7.2 Cityscapes数据集的目的8、数据集CocoCaptions介绍9、数据集CocoDetection介绍10、数据集DatasetFolder介绍11、数据集EMNIST介绍12、数据集FakeData介绍13、数据集FashionMNIST介绍1、

随便推点

在JS中消灭for循环_guolinengineer的博客-程序员秘密

一,用好 filter,map,和其它 ES6 新增的高阶遍历函数问题一:将数组中的 false值去除const arrContainsEmptyVal = [3, 4, 5, 2, 3, undefined, null, 0, &quot;&quot;];答案:const compact = arr =&amp;gt; arr.filter(Boolean); 问题二: 将数组中的 VIP 用户...

[问题解决]RedHat7更换CentOS7的yum源时踩过的坑_packagekit-backend_LarryHai6的博客-程序员秘密

更换yum源的流程查看当前yum程序 $ rpm -qa|grep yum 这里推荐将其结果截屏或拷贝出来,以免后面报错修复。 删除原有yum源 $ rpm -aq | grep yum|xargs rpm -e --nodeps 判断自己的系统适合哪个CentOS源 放在第一位的判断标准就是系统自带python的版本。 如果自带python2.6版本,那么你比较适合CentOS 6.9系统,你所...

postgresql安装之最后一步出现problem running post-install step. Installation may not complete correctly错误,解决方法_偷吃了老鼠的土豆的博客-程序员秘密

软件安装了一个月了这个问题终于解决了,安装的时候不需要重新选什么语言,也不需要在电脑上上设置什么,只需要在自己创建的postgres账户下安装就可以了!!只需要在自己创建的postgres账户下安装就可以了!!只需要在自己创建的postgres账户下安装就可以了!!感动!!!!终于解决了,明天好好去上实验课。。。。...

2023-03-06 Android studio java获取当前app版本号(versionCode)和版本名称(versionName)_android获取versioncode_海月汐辰的博客-程序员秘密

【代码】2023-03-06 Android studio 获取当前app版本号(versionCode)和版本名称(versionName)

SAP新一代全栈开发工具:SAP Business Application Studio_汪子熙的博客-程序员秘密

作为SAP从业者,我们能够清楚地感受到这些年SAP技术进化的趋势。SAP前端开发技术的进化方向,从SAP GUI,到能在浏览器里运行的ABAP Webdynpro / WebClient UI,再到现在仍然没有停止进化的Fiori UX. 而Fiori也从诞生之初只支持SAP UI5,进化到现在能够同时支持Angular, React和Vue等多种前端框架。关于SAP前端技术的演进,可以参考...

修改oracle 实例名,修改Oracle实例名_芒果冰OL的博客-程序员秘密

1、修改实例名(sid) 1.1、检查原来的数据库实例名(sid) [email protected][/home/oracle]&gt; echo $ORACLE_SID orcl [email protected][/home/oracle]&gt; sqlplus / as sysdba SQL*Plus: Release 10.2.0.1.0 - Production on Sun D...

推荐文章

热门文章

相关标签