5道貪心演算法 1道思維 1道搜尋

2021-07-26 08:33:40 字數 2653 閱讀 8639

links:

統計頻率求哈夫曼編碼後所需的碼長,小於給定要求的即為yes。

用優先佇列或者multiset或者自己維護乙個有序佇列都可以。

我這裡用的set

要注意只有乙個字母時的處理。

#include

#include

#include

#include

#include

#include

using

namespace

std;

int n;

multiset

s;int acc[27];

int main()

for (int i = 0; i <= 26; i++)

}int ans = 0;

if (s.size() == 1)

else

}if (ans <= n)

else

}return

0;}

貪心,從最大的開始選起,就可以用最少的數量修牆。

#include

#include

#include

using

namespace

std;

int l, n;

int len[605];

bool cmp(int a, int b)

int main()

sort(len, len + n,cmp);

int ans = 0;

for (int i = 0; i < n; i++)

else

}if (l != 0)

else

}return

0;}

之前寫過的的貪心dp題

也是之前寫過的貪心題了

一開始不會做的貪心題,題解方法是選擇1.最快和最慢的過去,最快的回來,最快而次慢的過去,最快的回來。2.最快的和次快的過去,最快的回來,最慢和次慢的過去,次快的的回來,這樣可以把最慢兩個人送過去,是問題規模減小2人,同時還得注意1,2,3人時的處理。

#include

#include

#include

using

namespace

std;

int p[1005];

int min(int a, int b)

int cal(int n)

if (n == 1 || n == 2)

else

if (n == 3)

else

return ans;

}int main()

sort(p, p + n);

ans = cal(n);

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

}return

0;}

兩國打架,給出的所有數字對中,兩個數字分別就是兩個國家的人,但不知道到底是哪個國家的人,要求求出兩個國家中某個國家的最大人數可能值。

一開始用dfs然後就超時了,後來用了連通塊染色,記得每次要清空那些陣列。

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

int color[20002];

int n;

vector

e[20002];

bool exist[20002];

int acount[3];

void dfs(int cnt,int k)

}}int main()

for (int i = 0; i < n;i++)

int ans = 0;

for (int i = 1; i <= num; i++)

}printf("case %d: %d\n", k, ans);

}return

0;}

n個有序對,要嘛是有序對的左邊加入左陣列,要嘛是有序對的右邊加入右陣列,求兩個陣列中的最大值之和的最小值。

如果當前有序對中的一邊的數值已經小於了陣列的最大值,肯定就把他加入那邊的陣列,題解的做法是將有序對按左邊從小到大排序,然後從末尾遍歷回去,這樣有序對的左邊不斷遞減,同時維護右邊的最小值,便可以得到答案。

#include

#include

#include

#include

#include

using

namespace

std;

struct ppnum[100005];

bool cmp(pp a, pp b)

int main()

sort(num, num + n, cmp);

int ans = num[n - 1].a + num[n - 1].b,r=num[n-1].b;

for (int i = n - 2; i >= 0; i--)

printf("case %d: %d\n", k, ans);

}return

0;}

兩道貪心演算法題

假設有n項物品,大小分別為s 1 s 2 s i sn 其中s i為滿足1 s i 100的整數。要把這些物品裝入到容量為100的一批箱子 序號1 n 中。裝箱方法是 對每項物品,順序掃瞄箱子,把該物品放入足以能夠容下它的第乙個箱子中。請寫乙個程式模擬這種裝箱過程,並輸出每個物品所在的箱子序號,以及...

一道演算法題隨筆(1)

迴圈矩陣 第一列和最後一列是相鄰的 求該矩陣中最大子矩陣 就是子矩陣中的元素和最大 輸入的資料在檔案input.txt中讀取,輸出的結果存入output.txt中 輸入資料的格式如下 中間只能乙個空格,否則就不能存入陣列中 41 1 0 2 5 1 3 1 2 2 1 4 7 8 0 5 usr l...

自測題1道

看到這樣一樣題,想想就簡單的寫了寫自測一下,還是有很多收穫。需求 1.模擬銀行,客戶關係封裝類 2.客戶到銀行辦理業務需先排隊 3.銀行根據佇列處理業務,優選選擇金卡客戶 4.辦理建卡 存款 取錢 銷戶業務。思路 1.定義銀行類,客戶類,佇列類 2.思考現實例項,銀行 佇列只能有乙個例項,客戶可以有...