數的劃分【傳送門】
演算法的話,dfs+剪枝;
據說是01年之前的noip提高組;
思路:這道題是求把n無序的劃分成k份的方案數,最直接的搜尋方法是依次列舉x1,x2……xk的值,然後判斷,顯然這麼搜尋的話,很容易就tle了qwq。所以我們需要剪枝,這道題用到的主要是可行性剪枝和上下界剪枝;
①因為本題不考慮分解的順序,所以我們可以規定分成的這k個數是從小到大分的,即a[i]<=a[i+1]。
②假設我們已經把n分解為i-1個數分別為a[1],a[2]……a[i-1](其中a[1]<=a[2]<=……<=a[i-1]),那麼a[i]的最大值是將剩餘k-i+1個數平均劃分,即設m=n-(a[1]+a[2]+……+a[i-1]),那麼a[i]<=m/(k-i+1),所以對於每個a[i],擴充套件上屆為m/(k-i+1);
經過剪枝,好像就快一點了qwq;
#includeusingnamespace
std;
int n,m,a[8
],s;
void dfs(int
k)
for(int i=a[k-1];i<=n/(m-k+1);i++)
}int
main()
洛谷 P1025 數的劃分
題目描述 將整數n分成k份,且每份不能為空,任意兩個方案不相同 不考慮順序 例如 n 7,k 3,下面三種分法被認為是相同的。1,1,5 1,5,1 5,1,1 問有多少種不同的分法。輸入輸出格式 輸入格式 n,k 6 n 200,2 k 6 輸出格式 乙個整數,即不同的分法。輸入輸出樣例 輸入樣例...
洛谷P1025 數的劃分
將整數n分成k份,且每份不能為空,任意兩個方案不相同 不考慮順序 例如 n 7,k 3,下面三種分法被認為是相同的。1,1,5 1,5,1 5,1,1 問有多少種不同的分法。輸入格式 n,k 6 輸出格式 乙個整數,即不同的分法。輸入樣例 1 7 3 輸出樣例 1 4 四種分法為 1,1,5 1,2...
洛谷P1025 數的劃分
將整數n分成k份,且每份不能為空,任意兩個方案不相同 不考慮順序 例如 n 7,k 3,下面三種分法被認為是相同的。1,1,5 1,5,1 5,1,1 問有多少種不同的分法。輸入格式 n,k 6 輸出格式 乙個整數,即不同的分法。輸入樣例 1 複製7 3 輸出樣例 1 複製4 四種分法為 1,1,5...