当前位置:网站首页>Dynamic programming of the division of numbers
Dynamic programming of the division of numbers
2022-08-04 05:00:00 【a boy in the mountains】
1. Corresponding OJ link:
Division of Numbers_Niu Ke Tiba_Nioke Network(nowcoder.com).com)
2. Title description:
3. Problem solving ideas:
Method 1: Direct violent recursion
Try from the index position to n, please see the code for details.
Corresponding code:
class Solution {public:/*** The class name, method name and parameter name in the code have been specified, please do not modify it, just return the value specified by the method*** @param n int the number to be divided* @param k int into k parts* @return int*/int divideNumber(int n, int k) {// write code herereturn process(n, k, 1);}//Recursive meaning: the number of methods to divide n into k points starting from the index positionint process(int n, int k, int index) {if (k < 0) {return 0;}//If there are 0 points left, then there is only one division result when k is 0if (k == 0) {return n == 0 ? 1 : 0;}int ways = 0;for (int i = index; i <= n; i++) {// try the number at position iways += process(n - i, k - 1, i);}return ways;}};
Unfortunately this method will still time out even if it is changed to memoized search and dp.Let's look at the following method.It feels very good:
We can imagine k as having k boxes. According to the meaning of the title, each box cannot be empty, so we can put a 1 in each box in advance so that the box will not be empty.Then we can put the remaining n-k balls into k boxes. At this time, there are many possibilities. n-k balls can be placed in the first box, which can be placed in 1 and 2.The two boxes can also be placed in the three boxes 1 to 3, and they can also be placed in the boxes 1 to k.
Corresponding code:
class Solution {public:/*** The class name, method name and parameter name in the code have been specified, please do not modify it, just return the value specified by the method*** @param n int the number to be divided* @param k int into k parts* @return int*/vector>dp;int mod=1000000000+7;int divideNumber(int n, int k) {// write code here// dp.resize(n+1,vector >(k+1,vector (n+1,-1)));dp.resize(n+1,vector (k+1,-1));return process(n,k);}//The number of ways to divide n into k pointsint process(int n, int k){if(n==k){return 1;}if(k>n){return 0;}if(dp[n][k]!=-1){return dp[n][k];}int ways=0;//The possibility of placing the remaining n-k balls in k boxes is enumeratedfor(int i=1;i<=k;i++){ways=(ways+process(n-k,i))%mod;}dp[n][k]=ways;return ways;}};
Slope optimization:
Corresponding code:
class Solution {public:/*** The class name, method name and parameter name in the code have been specified, please do not modify it, just return the value specified by the method*** @param n int the number to be divided* @param k int into k parts* @return int*/vector>dp;int mod=1000000000+7;int divideNumber(int n, int k) {// write code here// dp.resize(n+1,vector >(k+1,vector (n+1,-1)));dp.resize(n+1,vector (k+1,-1));return process(n,k);}//The number of ways to divide n into k pointsint process(int n, int k){if(k==0){return n==0?1:0;}if(k==n){return 1;}if(k>n){return 0;}if(dp[n][k]!=-1){return dp[n][k];}int ways=process(n-1,k-1);ways=(ways+process(n-k,k))%mod;dp[n][k]=ways;return ways;}};
边栏推荐
猜你喜欢

转:管理是对可能性的热爱,管理者要有闯进未知的勇气

SQL interview Questions

文件系统的简单操作

你以为border-radius只是圆角吗?【各种角度】

Get the selected content of the radio box

7-1 LVS+NAT 负载均衡群集,NAT模式部署
![[Ryerson emotional speaking/singing audiovisual dataset (RAVDESS)]](/img/f7/78eea9f14ca97b5e78592c7c2be313.png)
[Ryerson emotional speaking/singing audiovisual dataset (RAVDESS)]

if,case,for,while

将xml标签转换为txt(voc格式转换为yolo方便进行训练)

10 Convolutional Neural Networks for Deep Learning 3
随机推荐
C专家编程 第5章 对链接的思考 5.3 函数库链接的5个特殊秘密
Uni-app 小程序 App 的广告变现之路:全屏视频广告
备份工具pg_dump的使用《postgres》
看DevExpress丰富图表样式,如何为基金公司业务创新赋能
解决错误:npm WARN config global `--global`, `--local` are deprecated
manipulation of file contents
【21 Days Learning Challenge】Direct Insertion Sort
【云原生--Kubernetes】Pod资源管理与探针检测
【21天学习挑战赛】直接插入排序
el-Select selector bottom fixed
技术解析|如何将 Pulsar 数据快速且无缝接入 Apache Doris
C专家编程 第4章 令人震惊的事实:数组和指针并不相同 4.3 什么是声明,什么是定义
系统设计.秒杀系统
C Expert Programming Chapter 4 The Shocking Fact: Arrays and Pointers Are Not the Same 4.5 Other Differences Between Arrays and Pointers
7. The principle description of LVS load balancing cluster
drools from download to postman request success
2022软件测试面试题 最新字节跳动50道真题面试题 刷完已拿下15k 附讲解+答疑
SVM介绍以及实战
SQL interview Questions
Explain详解与实践



