1樓:匿名使用者
典型的動態規劃揹包問題。
2 動態規劃。
你找一下揹包問題,到處都有詳細解答~~~
跟這個問題類似 只要稍微改一下題目和**就行。
改了之後思路如下 幫你換成c語言了 給分啊~~~
有一個箱子容量為v(正整數,o≤v≤20000),同時有n個物品(o≤n≤30),每個物品有一個體積(正整數)。要求從 n 個物品中,任取若千個裝入箱內,使箱子的剩餘空間為零。(這裡的v就是你的s,這裡的n就是你的n)
void search(int k, int v)
best為全域性變數,表示箱子的剩餘空間的最小值,初始值為設為很大的正數就好。
所以 search(n,v)後 best為0則表示有解。
2 dp 動態規劃(迭代法)
f[i,j]為前i個物品中選擇若干個放入使其體積正好為j的標誌,為布林型。
實現:將最優化問題轉化為判定性問題。
f [i][j] =f [ i-1 ][j-w[i] ]f [ i-1 ][j ] w[i]<=j<=v) 邊界:f[0][0]=true;
for(i=1;i<=n;i++)
for(j=w[i];j>=v;j--)
f [i][j] =f [ i-1 ][j-w[i] ]f [ i-1 ][j ]
算完之後 f[n][v]為true則有解。
3 dp 動態規劃(迭代法優化)
優化:當前狀態只與前一階段狀態有關,可降至一維。
f[0]=true;
for(i=1;i<=n;i++)
for(j=w[i];j>=v;j--)
f [j] =f [ j-w[i] ]f [ j ]
算完之後 f[v]為true則有解。
4 dp 動態規劃(備忘錄演算法)
f為二維陣列int f[n][v] 一開始初始化為0
bool dp(int n, int v)
dp(n,v)為1則有解。
2樓:匿名使用者
無聊中,我來下吧 ,不過我不是很清楚,是找到一組就可以,還是把所有滿足情況都找到。
其實這道題不用什麼演算法就行,因為n比較小,列舉都可以。
列舉法:列舉就是把所有情況都試一下,看是否滿足,任意選取幾個數,那就從一個數開始,到n個數結束,因為n《=20,那麼計算次數是2^20 = 1048576,方案可行。
**響,接**去了,想出其他方法在修改~
3樓:匿名使用者
首先確定要取幾個數吧,然後定義幾個變數 如果是三個可以這樣。
i j k 分別都可以大於等於0和小於等於20 然後其和等於20 這兩個條件應該就可以出來幾組數了吧。
演算法就是程式,這句話對不?
4樓:四舍**入
不對。演算法是解決問題的步驟,程式是演算法的**實現演算法要依靠程式來完成功能,程式需要演算法作為靈魂。
程式是結果,演算法是手段(為編寫出好程式所使用的運算方法)。同樣編寫一個功能的程式,使用不同的演算法可以讓程式的體積、效率差很多,所以演算法是程式設計的精華所在。
5樓:匿名使用者
不對,演算法是解決問題的步驟。而程式是對問題的具體**實現。演算法依靠程式來完成功能。
6樓:匿名使用者
不對,程式是對演算法的具體實現。
7樓:仉昀邇
演算法是程式的靈魂,程式是演算法的演繹。就像一棟房子,演算法就是設計圖,是抽象的;程式則包括鋼筋、水泥等這些的材料,是具體的。
這樣說不知能否解答你的疑問。
8樓:東方刀客
程式包括演算法和資料結構兩個方面的內容,不能以偏概全。
9樓:安徽新華電腦專修學院
程式=資料結構+演算法。
c語言演算法問題
10樓:蝶love_花
"→"的意思是等於,即t=t*i;s5的其實就是一個迴圈,翻譯過來就是下面的一段**:
while (i<=5)
明白了嗎?好吧,我把運算步驟一步步的說給你看。
首先是賦初值:t=1,i=2;
然後開始迴圈,在這道題中一共要做四次迭代(i從2到5),分別是i=2,i=3,i=4,i=5
第一次迴圈,即i=2時,t=t*i=1*2=2,注意此時t此時的值是2了(t=1*2);
然後對i作「++運算,接下來i=3,t=t*i=2*3=6; 此時t=1*2*3=6;
接著對i做「++運算,這時i=4,t=t*i=6*4=24;此時t=1*2*3*4=24;
接著對i做「++運算,這時i=5,t=t*i=24*5=120;此時t=1*2*3*4*5=120;
然後由於i不能大於5(我們可以在迴圈體中設定迴圈判斷條件:i<=5),所以迴圈到此為止,於是此時t 的值就是最終的運算結果。
從上面的迴圈過程可以看到,我們每次都把一次迭代後的計算結果賦值給t。
現在懂了嗎?
11樓:淦海瑤
這個就是找到規律,用迴圈把問題解決。
最原始方法:c實現。
int a,b;
b=1*2;
a=b;b=a*3;
a=b;b=a*4;
a=b;b=a*5;
改進的演算法:
int a,i;
a=1;for(i=2;i<=5;i++)
a*=i;你說的那個 → 是賦值的意思,就是說讓txi儲存在t空間中。
12樓:網友
——>那句話的意思相當於i=i+1;()s3處的)
s5步的意思相當於if(i<=5),goto s3;這樣應該很明白了吧。
演算法問題j**a
13樓:匿名使用者
看了一下,好像不容易!
可以把每個矩形的一個物件,只有長寬兩個長度屬性,進行組合,它們之間空隙越少越好,就是愈接近他們的面積和效果越好!
不過這個重點在於這個組合過程,長度越接近的就讓他們的邊儘量重合,不過好像很難,如果屬性圖形學的說不定有相應的演算法,有空再回頭看吧!
上面對矩形的屬性還應該增加一個屬性:方向,就是讓它橫放還是豎放。至於斜放那就不用考慮了!
演算法:1)可以尋找存在有等邊情況的矩形,將這些矩形先拼接成一個矩形,接著尋找矩形中存在一個矩形邊等於若干個矩形邊的和,把這些矩形拼接起來,(但這樣有可能不一定是最優的)。最後尋找那些邊長接近的拼接起來,知道沒有新的矩形!不過數學功底不夠,沒辦法形式化證明最小。
2)另外可以用窮舉法(當n不大時很適合),而且完全可以實現,就是用組合排列(包括對相對位置和方向(2個旋轉方向)進行全排列),例如當n=2,它們相對位置的組合中有效的是:4種。計算每一種可能取最小的就ok!
但這個演算法效率比較低,當然裡面有很多是重複的,可以優化演算法!
總結:上面都是邊寫邊想的,很隨意。不過第二個演算法一定可行,但需要優化。
數學知識不夠,只能到此。至於實現那就容易了,只要演算法好。時間緣故停在此吧!
不過你的題目挺有意思的!若誰有好的演算法,期待中……
14樓:網友
演算法不是問題,有需要請問我。
在程式設計和演算法領域,有哪些經典問題
15樓:告才
對於歸併演算法,看不懂的話一般是因為沒理解什麼是歸併,為什麼用歸併。我先給你通俗的說一下這個演算法的含義,然後你再看你的教材或者**實現,相對就好理解了。
歸併演算法一開始是為了大資料和平行計算而開發出來的,當一段需要排序的資料量非常大的時候,大到記憶體都裝不下了(早期的計算機記憶體很小,只有kb級別,很容易出現這種現象),這時可以用歸併演算法,先把這段大資料分成兩個或兩個以上的資料段,然後先分別對每個資料段進行排序,再把這些排好序的小資料段一個一個的組合起來,組合的時候再排一次序,等到所有的小資料段都被組合了之後,就恢復成了原來的大資料,但是排好序了。在對小資料段分別進行排序的時候,因為它們之間是相互獨立的,因此可以用平行計算來加快速度。所以歸併演算法在早期使用分佈計算的時候,或者現在使用多核計算機的時候,速度很快。
對於遞迴這種思路,其實它就是一種縱深錨點思維能力,可以通過訓練來加強。方法很簡單,就是訓練找錨點的能力,錨點就是遞迴中的返回條件。找準了錨點,遞迴的過程是不用考慮的,有多少層的遞迴呼叫都不用理會,只要明白什麼條件下會結束遞迴、層層返回就行了。
演算法問題。
16樓:追風尋跡
第10天早上沒吃就只剩1個,那第一天摘了1534個,要是吃過後剩一個那就第一天摘了3070,演算法為:當天桃數為x,前一天的桃數為2(x+1)
17樓:夜神夢無眠
$day = 10;
total = 1;
for($i = 0; $i < day ; i ++var_dump($total);
如果用php 寫法是這樣寫的,其他語言 原理差不多。
c 演算法問題? 70,c 演算法問題?
c 演算法問題?include using namespace std int main 遍歷陣列,如果當前元素為0,則將其多寫一次。for int i 0 i len i nums i 1 0 在i 1的位置上新增一個0len 陣列長度加1 i 跳過新新增的0,繼續往後遍歷。輸出重新寫完後的陣列。f...
c語言問題程式設計,C語言程式設計問題
程式修改輸出加個 元 後面執行結果可看到 編譯執行結果 如果輸入50 如果輸入90 如果輸入100 如果輸入110 include int main if x 50 y 80 x printf f n y return 0 c語言程式設計問題 解題思bai路 完全跟百錢買百雞的問題是du一樣的 設大...
c語言程式設計問題,C語言程式設計問題
你演算法都寫出來了,還要我們幫你寫什麼,演算法能寫,相信你能搞定的 c語言程式設計問題 b 當i 0時。呼叫 if語句 a 6t a 就是t等於t a然後a自曾,得t 6 return t a 這是a已經自曾為7 得返回13 呼叫當i 1時if語句的else句 a 7t a 就是t等於t a然後a自...