• 世博体育代表咱们将5元钱分给3个东说念主-世博体育APP最新版2024安卓最新版_手机app官方版免费安装下载

  • 发布日期:2024-07-31 18:56    点击次数:104

    信息教训大赛Python挑战赛之动态琢磨算法世博体育

    Python挑战赛临了的编程题一般需要使用递归或动态琢磨算法完成题目,接下来咱们沿途望望“分钱有盘算”这说念佛典题目。通过每个体式的分析,学习使用动态琢磨科罚问题的经由。

    分钱有盘算(往年信息教训复赛真题)

    据了解,2018年以来,广东省委、省政府高度重视现代农业产业园建设,全省已完成第一轮省级现代农业产业园的创建16个国家级、161个省级、55个市级现代农业产业园,其中畜禽产业园共有21个,按级别分,有2个国家级19个省级;按主导产业分,有9个生猪产业园,10个家禽产业园(含鸡、狮头鹅、肉鸽),1个肉牛产业园和1个畜禽种业产业园。2021年是“十四五”开局之年,广东省启动第二轮产业园建设,现代畜禽产业园的发展迎来新机遇,今年已公示的74家产业园中有15家为畜禽类产业园。

    题目形貌有n个东说念主,他们需要分拨m元钱(m>n),每个东说念主至少分到1元钱,且每个东说念主分到的钱数必须是整数。求教有几许种分拨有盘算?

    输入形貌

    输入一瞥两个正整数n,m,用空格间隔。

    输出形貌

    输出分拨有盘算数。

    样例输入

    5 10

    样例输出

    126

    问题分析

    开动情状:淌若莫得东说念主(即i=0),那么莫得有盘算,有盘算数为0。淌若莫得钱(即j=0),那么独一的有盘算等于扫数东说念主王人分到 0 元钱,但这种情况不相宜每个东说念主至少1 元钱的条目,有盘算数为0。如下表所示:

    革新方程 :如i=3,j=5,代表咱们将5元钱分给3个东说念主,有盘算数用f(i,j)示意,扫数有盘算如下:临了一东说念主分1元,其余两东说念主分剩余的4元,有盘算数为f(i-1, j-1);临了一东说念主分2元,其余两东说念主分剩余的3元,有盘算数为f(i-1, j-2);临了一东说念主分3元,其余两东说念主分剩余的2元,有盘算数为f(i-1, j-3);临了一东说念主分4元,其余两东说念主分剩余的1元。不相宜要求,有盘算数为0;临了一东说念主分5元,其余两东说念主分剩余的0元。不相宜要求,有盘算数为0。要而论之,有盘算数意想如下:

    f(i,j) = f(i-1,j-1) + f(i-1, j - 2) + ... + f(i -1, i-1)

    因为 f(i-1, j - 2) + ... + f(i -1, i-1) = f(i, j-1)

    是以情状革新方程为:f(i,j) = f(i-1,j-1) + f(i, j-1)

    鸿沟条目:咱们界说一个二维列表dp ,其中dp[i][j]示意将j元钱分拨给i个东说念主的有盘算数。

    dp[1][1]=1示意1个东说念主,1元钱,惟有一种有盘算。m<n时,钱数少于东说念主数,有盘算数为0。

    参考代码【递归】

    deff(n, m): if m < n: return if n == 1: return 1 count = for i in range(1, m - n + 2):# 递归意想 f(i-1,j-1) **+ f(i-1, j - 2) + ... + f(i -1, i-1) # i的值最大为m-n+1 count += f(n - 1, m - i)# 从f(n-1, m-1) 到 f(n-1, m-(m-n+1))即f(n-1,n-1)累加乞降 return countn, m =map(int,input().split())print(f(n, m))

    参考代码【动态琢磨】

    n, m = map(int,input().split())dp =[[]*(m+1) for i in range(n+1)]for j in range(1, m+1): dp[1][j]=1 # 大于等于1元时,惟有1东说念主分拨有盘算有1种for i in range(2, n+1): for j in range(i, m+1):# 从i动手,j小于i不需要意想 dp[i][j]= dp[i-1][j-1] + dp[i][j-1]print(dp[n][m])

    递归和动态琢磨是科罚许多算法问题的两种遑急递次,尤其在处理需要重叠子问题求解的问题时至极灵验。尽管它们在某些方面同样,但在成果、内存使用以及杀青神气上有着权臣的分离。

    递归递归是一种通过函数调用自己来科罚问题的递次。递归常常用于科罚不错剖析为同面容问题的问题,其中每个子问题王人是原问题的一个更小版块。递归的关节在于找到一个基准情况(或称为基本情况),它是递归的罢手条目,确保递归调用不祥隔绝。优点精真金不怕火:代码常常比迭代递次更精真金不怕火,更容易交融。通用:适用于许多类型的问题,尤其是那些不错当然剖析为子问题的问题。漏洞可能导致无边的重叠意想:淌若莫得妥贴的缅思化或缓存机制,交流的子问题可能会被屡次意想。栈溢出风险:关于深层递归,可能会奢华调用栈空间。

    动态琢磨动态琢磨是另一种科罚优化和计数问题的递次,它通过将原问题剖析为相对简单的子问题的神气求解,况且存储子问题的解以幸免重叠意想。动态琢磨常常与填表法(或称为自底朝上递次)和缅思化递归(自顶向下加缅思化)相干联。优点高效:通过幸免重叠意想,动态琢磨常常比简单的递归杀青要快得多。易于杀青缅思化:关于递归递次,添加缅思化不错权臣栽培成果,使其更接近动态琢磨的成果。漏洞可能需要颠倒的空间来存储子问题的解。问题剖析和情状界说需要一定的手段和训导。

    关于小鸿沟问题或易于交融的问题世博体育,递归可能是更好的聘用。可是,关于需要处理无边数据或追求高性能的场景,动态琢磨常常是更好的聘用。在某些情况下,缅思化递归不错当作一种折衷有盘算,它结合了递归的精真金不怕火性和动态琢磨的成果。