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.思考現實例項,銀行 佇列只能有乙個例項,客戶可以有...