2016-05-31 18:52:15
題目大意:
給兩個等長數列,各取乙個數求和,找到最小的n組
解法:堆優化的大暴力
直接列舉所有可能在最大堆中更新,刪除最大組合
需要注意的地方:
1.如果任何乙個加數大於等於堆頂元素,break
2.如果兩者之和已經大於等於堆頂元素,break
1//最小的n個和 (codevs no.1245)2//
堆(優先佇列)
3 #include4 #include5 #include6
using
namespace
std;
7const
int maxn=100010
;8 priority_queue q;
9int
n;10
intx[maxn];
11int
y[maxn];
12int
ans[maxn];
13int
main()
1420
for(int j=1;j<=n;j++)
2124 sort(x+1,x+n+1
);25 sort(y+1,y+n+1
);26
for(int i=1;i<=n;i++)q.push(x[i]+y[i]);
27for(int i=1;i<=n;i++)
2837}38
for(int i=1;i<=n;i++)
3943
for(int i=n;i>=1;i--)
4447
return0;
48 }
1245 最小N個數的和
題目就簡單的貼上以下 題目描述 description 有兩個長度為 n 的序列 a 和 b,在 a 和 b 中各任取乙個數可以得到 n 2 個和,求這n 2 個和中最小的 n個。輸入描述 input description 第一行輸入乙個正整數n 第二行n個整數ai 且ai 10 9 第三行n個整...
Wiki OI 1245 最小的N個和
演算法與思路 k路歸併 堆 優先佇列 k路歸併具體請參考劉汝佳 演算法競賽入門經典訓練指南 p189 題目要求從兩個長度為n的數列中各取出一數相加,可得到n n個和,輸出這些和公升序的前n項 由於資料太大,不能通過先求和再排序的方式來求解,這個時候就要用到堆了 首先將a,b兩陣列排序,然後將a i ...
codevs1245 最小的N個和
題目描述 description 有兩個長度為 n 的序列 a 和 b,在 a 和 b 中各任取乙個數可以得到 n 2 個和,求這n 2 個和中最小的 n個。輸入描述 input description 第一行輸入乙個正整數n 第二行n個整數ai 且ai 10 9 第三行n個整數bi,且bi 10 ...