貪心之不完整例題

2021-09-01 23:41:34 字數 2458 閱讀 3172

設有n個活動時間集合,每個活動都要使用同乙個資源,比如說會議場,而且同一時間內只能有乙個活動使用,每個活動都有乙個使用活動的開始si和結束時間fi,即他的使用區間為(si,fi),現在要求你分配活動占用時間表,即哪些活動占用該會議室,哪些不占用,使得他們不衝突,要求是盡可能多的使參加的活動最大化,即所佔時間區間最大化!

原文:

#include#includevoid greedychoose(int len,int s[11],int f[11],int flag[11]);

int main()

; int f[11] =;

memset(book,0,sizeof(book));

greedychoose(11,s,f,book);

for(i = 0; i < 11; i ++)

if(book[i])

printf("%d ",i);

printf("\n");

return 0;

}void greedychoose(int len,int s[11],int f[11],int flag[11])

}

類似這種題還有個區間覆蓋問題,就是說很多個區間,其中有些是相互覆蓋著的,要求去除多餘的區間,使剩下的區間占用長度最大,實際就是這個題,只是問法變換了而已!

在一維空間中告訴你n條線段的起始座標與終止座標,要求求出這些線段一共覆蓋了多大的長度。

#includeint main()

; int f[10] = ;

len = f[0]-s[0];

j = 0;

for(i = 1; i < 10; i ++)

else

}} printf("%d\n",len);

return 0;

}

執行結果為13.

設有n個正整數,現在需要你設計乙個程式,使他們連線在一起成為最大的數字,比如說3個整數 12,456,342 很明顯是45634212為最大,4個整數 342,45,7,98顯然為98745342最大

程式要求:輸入整數n 接下來一行輸入n個數字,最後一行輸出最大的那個數字!

題目解析:這道題乍一看挺簡單,但仔細分析分析也是有點難度的。簡單在好像就是尋找哪個開頭最大,然後連在一起就是了,難在如果n大了,假如幾千幾萬,好像就不是那麼回事了,要解答這個題目需要選對合適的貪心策略,並不是把數字由大排到小那麼簡單。

相信氣泡排序都已經很熟悉了,注意看程式中最核心的比較規則是什麼,是這一句if(a[j] > a[j+1] ) 他是以數字大小作為比較準則來返回true或者是false,那麼我們完全可以改變一下這個排序準則,比如23,123,這兩個數字,在我們這個題中它可以組成兩個數字 23123和12323,分明是前者大些,所以我們可以說23排在123前面,也就是23的優先順序比123大,123的優先順序比23小,所以不妨寫個函式,傳遞引數a和b,如果ab比ba大,則返回true,反之返回false。

#include#includeint compare(int num1,int num2);

int main()

for(i = 1; i <= n; i ++)

printf("%d",a[i]);

printf("\n");

return 0;

}int compare(int num1,int num2)

while(num2)

if((k1*pow(10,ans2)+k2) < (k2*pow(10,ans1)+k1))

return 1;

return 0;

}

在貪心演算法裡面最常見的莫過於找零錢的問題了,題目大意如下,對於人民幣的面值有1元 5元 10元 20元 50元 100元,下面要求設計乙個程式,輸入找零的錢,輸出找錢方案中最少張數的方案,比如123元,最少是1張100的,1張20的,3張1元的,一共5張!

解析:這樣的題目運用的貪心策略是每次選擇最大的錢,如果最後超過了,再選擇次大的面值,然後次次大的面值,一直到最後與找的錢相等。

#includeint main()

; int moneyindex[6] =;

moneycount = count = 0;

scanf("%d",&all);

for(i = 0; i < 6;)

moneycount += moneyclass[i];

moneyindex[i] ++;

count ++;

if(moneycount == all)

break;

} for(i = 0; i < 6; i ++)

if(moneyindex[i] != 0)

printf("%d =%d\n",moneyclass[i],moneyindex[i]);

printf("%d\n",count);

return 0;

}

Verilog不完整if else,case鎖存

僅在組合邏輯電路 電平觸發 中產生鎖存,因時序邏輯電路本身具有儲存功能 邊沿觸發,邊沿到來前保持原狀 去掉注釋後 q 1 b0 若寫q q 仍鎖存器 rtl analysis schematic if else以上三種情況 去掉注釋後 僅此處無reg,因二選一選擇器不存值 module latcho...

php curl 獲取資料不完整

curl獲取資料的時候,結果的字串長度比較大。相同的結果每次獲取的資料都不全,並且長度也不一樣。試著把 header資訊修改為except 但還是不行 這個可以解決的問題是資料量太大導致獲取結果為空的情況 去掉curlopt returntransfer true 可以列印出完整資料 解決方案 修改...

OllyDbg完全教程 示例 不完整

不幸的是,您不能通過這種方式除錯ollydbg的外掛程式,外掛程式關聯到ollydbg.exe檔案,windows系統不能在同乙個應用程式裡載入並執行兩個可執行檔案。解碼提示 decoding hints 在某些情況下,分析器不能區分 和資料。讓我們看看下面的例子 const char s 11 0...