TYVJ P4366 整數拆分

2021-08-05 18:33:07 字數 759 閱讀 8503

一道非常好的搜尋題目。

要將任意乙個數拆分成斐波那契數的和,想到用搜尋從前往後依次拆分驗證,因為輸出要求,我們可以巧妙地用字串的形式儲存結果。

考慮到dfs的可行性和最優性剪枝,我們可以增加乙個變數t儲存當前已經拆分的個數,如果當前拆分的個數已經大於了所求的最小值,那就沒必要再搜尋了,具體細節見注釋。

小技巧:用讀入流stringstream 進行整數到字串的轉化

#include

#include

#include

#include

#include

using

namespace

std;

int f[50],n,minn;

string ans;

void dfs(int x,int t,int sum,string str)

if (t>minn||sumreturn ;//剪枝,如果當前的sum小於要拆分的斐波那契數,顯然是不合法的;

stringstream ss;//數字轉換成字串

string s;

ss<>s;

if (n!=f[x]||n==1)

}int main()

dfs(1,0,n,"");

if (ans[0]==' ') ans.erase(0,1);//刪除多餘空格

cout

0;

}

整數拆分問題

問題 對於1個正整數n,將其拆分成幾個正整數的和,如何拆分可使得其乘積最大?csdn使用者pathuang68給出的結論是 如果不在乎是否為整數的話,那麼把每份平均分為e 2.71828459045.時,所得到的乘積是最大的,如果要是整數的話,那麼就選盡可能地靠近e的整數即可,比如3。具體證明請參見...

190512 整數拆分

題目描述 乙個整數總可以拆分為2的冪的和,例如 7 1 2 4 7 1 2 2 2 7 1 1 1 4 7 1 1 1 2 2 7 1 1 1 1 1 2 7 1 1 1 1 1 1 1 總共有六種不同的拆分方式。再比如 4可以拆分成 4 4,4 1 1 1 1,4 2 2,4 1 1 2。用f n...

pta 整數拆分

給定乙個整數n,將其無序拆分成最大數為k的拆分數,n,k不超出100 要求 所有的拆分方案不重複。如當n 4,k 4時,一共有5種拆分方案,拆分如下 1 4 1 1 1 1 2 4 1 1 2 3 4 1 3 4 4 2 2 5 4 4輸入格式 每一行輸入一組整數n,k,遇到鍵盤結束符 z或檔案結束...