ALGO-22_蓝桥杯_算法训练_数的划分(DP)
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                ALGO-22_蓝桥杯_算法训练_数的划分(DP)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
                                
                            
                            
                            問題描述將整數n分成k份,且每份不能為空,任意兩份不能相同(不考慮順序)。例如:n=7,k=3,下面三種分法被認為是相同的。1,1,5; 1,5,1; 5,1,1;問有多少種不同的分法。
輸入格式n,k
輸出格式一個整數,即不同的分法
樣例輸入
7 3
樣例輸出
4 {四種分法為:1,1,5;1,2,4;1,3,3;2,2,3;}
數據規模和約定6<n<=200,2<=k<=6  
                        
                        
                        ?
記:
動態題目自己寫的依舊沒能得到滿分,學習他人的解題思路
(代碼參考:https://blog.csdn.net/liuchuo/article/details/51989133,https://blog.csdn.net/pason_pc/article/details/51228907)
例如輸入n=7,k=3
即得到了關于7的所有劃分
兩個重點:
1->代碼中i的值在prev-n/step之間,從prev開始,確保最小值不會比前一個小,避免出現重復情況;
到n/step結束,是因為當超過n/step時,會出現與前面檢索情況重復的現象,
(例dp(3,4,2),由于4=1+3或4=2+2在前面的情況出現過,故會出現重復情況,從而推出適用其他情況)
2->用于確定劃分的step,當step=1,即劃分完成,可進行計數
?
AC代碼:
1 #include <stdio.h> 2 3 int n,k; 4 int ans = 0; 5 6 void dp(int prev,int n,int step) 7 { 8 int i; 9 if (step == 1)/*劃分結束*/ 10 { 11 ans ++; 12 return ; 13 } 14 15 16 for (i = prev ; i <= n/step ; i ++) 17 { 18 dp(i,n-i,step-1); 19 } 20 return ; 21 } 22 23 int main(void) 24 { 25 scanf("%d %d",&n,&k); 26 dp(1,n,k); 27 printf("%d",ans); 28 return 0; 29 }?
轉載于:https://www.cnblogs.com/mind000761/p/8764219.html
總結
以上是生活随笔為你收集整理的ALGO-22_蓝桥杯_算法训练_数的划分(DP)的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: python概念(一)python基本数
 - 下一篇: 借用的对vue-cli配置对解析