導航:首頁 > 源碼編譯 > 演算法分石堆

演算法分石堆

發布時間:2022-03-02 09:59:01

❶ 有一堆石頭,分成6堆,每堆石頭數目不一樣,且每堆石頭位置固定,用最少步奏把石頭平均分開,說下思路

先來個 求和 ,平均值 ,
然後 一個石頭堆 開始 ,判斷 該石頭堆是 大於 平均值 還是 小於,如果大於,就 便利 其他的石頭堆 ,然後 從 該隊中 取出 多餘的 放到 下一個

❷ 35個石子分成9堆每堆的石子數不一樣能分嗎

不能
按最小的情況來算,9堆分別有石子1、2、3、4、5、6、7、8、9顆
至少需要石子:1+2+3+4+5+6+7+8+9=45顆
大於35顆
所以不能分

❸ pascal問題 分石堆

其實回溯沒必要這么復雜
像下面這樣就可以了
(每塊石頭只有兩種可能 在第一堆或者在第二堆
k代表第k塊石頭 sum代表第一堆的總和[第二堆就是全部石頭的和減去第一堆])
我很不明白上面程序中
for i:=k+1 to 2*n do
begin
b[k+1]:=a[i];
sh(k+1)
end;
是什麼意思
而且過程中的變數初始值不是0 上面程序s,s1都應該賦值為0
且在過程用的變數應該在過程中聲明
上面程序的過程里應該聲明i為integer

var a:array[1..1000]of longint;
c,n,i,h:longint;

procere sh(k:longint;sum:longint);
begin
if k>=2*n+1 then begin
if abs(h-sum-sum)<c then c:=abs(h-sum-sum);
exit;
end
else begin
sh(k+1,sum+a[k]);
sh(k+1,sum);
end;
end;

begin
c:=maxlongint;
readln(n);
for i:=1 to 2*n do begin readln(a[i]);h:=h+a[i]; end;

sh(1,0);
writeln(c);
end.

演算法問題,什麼是堆什麼不是堆好像覺得隨便給個數組都說對求教啊。。那就給一個7的數組 這也是堆嗎

堆分為最大堆和最小堆兩種。

對於一個數組a[n],任取一個元素a[i],若滿足以下兩個條件,則可以說這是一個最大堆:

1.若i滿足2i+1<n,一定有a[i]>a[2i+1];

2.若i滿足2i+2<n,一定有a[i]>a[2i+2]。

對於一個數組a[n],任取一個元素a[i],若滿足以下兩個條件,則可以說這是一個最小堆:

1.若i滿足2i+1<n,一定有a[i]<a[2i+1];

2.若i滿足2i+2<n,一定有a[i]<a[2i+2]。

為了更直觀地理解,可以用二叉樹來描述:即所有非葉節點元素關鍵字都大於其左右孩子(如果有左右孩子)的關鍵字。

舉個例子說明:設數組a[7]={55,18,8,57,52,24,2},此時還不是最大堆,調整為最大堆後為a[7]={57,55,24,18,52,8,2}

❺ 有沒有什麼演算法把一堆數據分為高低兩組的

7Zip極限壓縮,效果最好,數據文件實測壓縮率可達15%,已壓縮文件可達80%!唯一缺點是解壓和壓縮同時極慢!想要速度可以用Zip!但Zip效果可能最差!

❻ 石子分堆

這個根本是你的思路問題,這道題的解法是動態規劃。狀態轉移方程為f( j ) = f( j ) || f( j - w[ i ] )
f( j )表示能否選出總和為j的石子
然後尋找最接近所有石子總合的石子數量即可,程序如下。
#include <iostream>

using namespace std;

int main( )
{
int w[ 1000 ], n, i, j, sum = 0;
bool f[ 100000 ];
cin >> n;
for ( i = 0; i < n; i++ )
{
cin >> w[ i ];
sum += w[ i ];
}
for ( i = 0; i <= sum / 2; i++ )
f[ i ] = false;
f[ 0 ] = true;
for ( i = 0; i < n; i++ )
for ( j = sum / 2; j >= w[ i ]; j-- )
f[ j ] = f[ j ] || f[ j - w[ i ] ];
for ( j = sum / 2; j >= 0; j-- )
if ( f[ j ] )
break;
cout << sum - j * 2 << endl;
return 0;
}

❼ 什麼是堆演算法結構裡面的。

堆結構,又叫「堆棧結構」。是電腦里經常用到一個名詞。舉例:在我們日常生活中,當你往一個很小的容器里放東西,先放進去的東西,再倒出來時,一定落再後面,而後放進去的一定先倒出來,這就是堆棧結構的基本原理。早期的計算機對數據的處理就是基本是這個原理。就做串型原理。這種結構有個好處,要處理的數據能有條不紊地處理,減少計算機誤操作的幾率。但這種結構一個最大的缺點就是處理速度慢。在當今的科學技術如此發達處理數據如此多的狀態下,難以完成任務。如是就發明了並行結構,用一個處理器根據條件來對數據進行處理,而不是要一個一個地去選擇執行,這樣大大提高了數據處理的效率。後來人們在此基礎上再增加處理器,這樣處理數據的速度更快了。

❽ n個不同的物品,分成M堆,每堆至少一個。問有多少種分法,求高效率的演算法。

在n個物體中,先選出m個物體,每一堆放一個,這樣有A(m)(n)=n*(n-1)*....*(n-m+1)種情況,然後其餘的物品隨便放,有m^(n-m)種情況,兩者相乘就是答案

❾ 排列組合 平均分堆為什麼要除以堆數的階層

這里舉一個簡單的例子說明一下
甲乙丙丁4個人平均分成2組
那麼有(4C2)*(2C2)/(2A2)=3種情況,很明顯甲乙,甲丙,甲丁(兩組中一組的情況)三種情況,因為選好1組以後,剩下一組就不用分了,自動分成了一組
而如果不除以分組的階乘,那麼就會有重復出現,4C2*2C2中,有甲乙,甲丙,甲丁,乙丙,乙丁,丙丁(兩組中一組的情況),這時候甲乙和丙丁一組會與丙丁和甲乙一組重復,所以要排除重復的情況:2組的全排列2A2
同理,6個人abcdef均分為3組
任選一組ab,ce,df,按6C2*4C2*2C2的演算法,會有3A3種情況重復,即ab,ce,df三組的全排列
所以6人分3組答案為6C2*4C2*2C2/3A3

❿ 演算法 堆是怎樣的一種結構

堆有兩個含義,一個是用於動態分配用的堆區,另外一個是一種很重要的數據結構
以下說明都是關於後面的堆:
存儲結構是順序,邏輯結構是完全二叉樹,按照各數據元素關鍵碼的次序不同分為大根堆(也就大頂堆)和小根堆(也叫小頂堆),建立好初始堆,就可以在得到單獨的最大值(大根堆)或者最小值(小根堆)後,以最短時間(O(log2n))再次得到第二大(或者第二小)的關鍵碼值,並且保持結構還是堆,一般用於優先順序隊列的實現,像C++stl的priority_queue,還有一種排序叫做堆排序的同樣也是以其為基礎的

閱讀全文

與演算法分石堆相關的資料

熱點內容
命令方塊指令冰封劍 瀏覽:782
android中so文件 瀏覽:274
手工用氣球做的捏捏樂解壓神器 瀏覽:195
app升級後就閃退怎麼辦 瀏覽:33
手錶上的樂塗app怎麼下載 瀏覽:719
程序員身上的六宗罪是什麼 瀏覽:143
游戲編程精粹6 瀏覽:69
修復ie的命令 瀏覽:602
linux伺服器怎麼查看地址 瀏覽:65
底部異地持倉源碼 瀏覽:105
加密應用手機 瀏覽:798
程序員考試考什麼科目 瀏覽:485
程序員必備文檔編輯 瀏覽:960
踩水果解壓大全 瀏覽:634
什麼是dk伺服器在 瀏覽:461
nusoapphp下載 瀏覽:929
黑莓原生解壓rar 瀏覽:956
百度解壓縮在哪 瀏覽:788
硬解壓卡怎麼用 瀏覽:183
新買的聯想伺服器怎麼配置 瀏覽:757