当前位置:网站首页>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;}};
边栏推荐
- 42. 接雨水
- 7-2 LVS+DR概述与部署
- 7-3 LVS+Keepalived Cluster Description and Deployment
- System design. How to design a spike system (full version transfer)
- el-Select selector bottom fixed
- See how DevExpress enriches chart styles and how it empowers fund companies to innovate their business
- There is an 8 hour difference between the docker installation of mysql and the host.
- JVM Notes
- 2022 software test interview questions The latest ByteDance 50 real interview questions, 15k have been won after brushing, with explanation + Q&A
- Write golang simple C2 remote control based on gRPC
猜你喜欢

编程大杂烩(四)

7-3 LVS+Keepalived Cluster Description and Deployment

3000 words, is take you understand machine learning!

How to keep the source code confidential in the development under the burning scenario

See how DevExpress enriches chart styles and how it empowers fund companies to innovate their business

ADC噪声全面分析 -03- 利用噪声分析进行实际设计
2022年软件测试——精选金融银行面试真题

Stop behind.

应届生软件测试薪资大概多少?

【机器学习】21天挑战赛学习笔记(一)
随机推荐
7-2 LVS+DR Overview and Deployment
C Expert Programming Chapter 5 Thinking about Chaining 5.6 Take it easy --- see who's talking: take the Turning quiz
C Expert Programming Chapter 5 Thinking about Linking 5.1 Libraries, Linking and Loading
应届生软件测试薪资大概多少?
3000 words, is take you understand machine learning!
Interesting Kotlin 0x0E: DeepRecursiveFunction
Structure function exercise
7-2 LVS+DR概述与部署
技术解析|如何将 Pulsar 数据快速且无缝接入 Apache Doris
获取单选框选中内容
将xml标签转换为txt(voc格式转换为yolo方便进行训练)
leetcode 12. 整数转罗马数字
7. The principle description of LVS load balancing cluster
Shocked, 99.9% of the students didn't really understand the immutability of strings
C Expert Programming Chapter 5 Thinking about Linking 5.2 Advantages of Dynamic Linking
mysql index notes
The 2022 PMP exam has been delayed, should we be happy or worried?
[Evaluation model] Topsis method (pros and cons distance method)
QT 如何识别文件的编码格式
备份工具pg_dump的使用《postgres》



