当前位置:网站首页>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;}};
边栏推荐
- [Evaluation model] Topsis method (pros and cons distance method)
- C Expert Programming Chapter 4 The Shocking Fact: Arrays and Pointers Are Not the Same 4.5 Other Differences Between Arrays and Pointers
- 图像处理之Bolb分析(一)
- Mini program + e-commerce, fun new retail
- 深度学习环境配置
- 深度学习之 10 卷积神经网络3
- The Shell function
- 解决错误:npm WARN config global `--global`, `--local` are deprecated
- Uni-app 小程序 App 的广告变现之路:全屏视频广告
- QT 如何识别文件的编码格式
猜你喜欢
随机推荐
C专家编程 第4章 令人震惊的事实:数组和指针并不相同 4.4 使声明与定义相匹配
day13--postman接口测试
7-1 LVS+NAT 负载均衡群集,NAT模式部署
如何打造一篇优秀的简历
System design. Seckill system
【21 Days Learning Challenge】Direct Insertion Sort
基于gRPC编写golang简单C2远控
【评价类模型】Topsis法(优劣解距离法)
System design. How to design a spike system (full version transfer)
7-3 LVS+Keepalived Cluster Description and Deployment
3000字,一文带你搞懂机器学习!
C Expert Programming Chapter 4 The Shocking Fact: Arrays and pointers are not the same 4.4 Matching declarations to definitions
数据治理平台项目总结和分析
Turn: Management is the love of possibility, and managers must have the courage to break into the unknown
drools从下载到postman请求成功
烧录场景下开发如何进行源代码保密工作
编程大杂烩(三)
文件内容的操作
How to keep the source code confidential in the development under the burning scenario
获取单选框选中内容