序列合併(暴力 剪枝)

2021-08-22 15:11:35 字數 915 閱讀 8765

題目描述

有兩個長度都是n的序列a和b,在a和b中各取乙個數相加可以得到n^2個和,求這n^2個和中最小的n個。

輸入第一行乙個正整數n;

第二行n個整數ai,滿足ai<=ai+1且ai<=10^9;

第三行n個整數bi, 滿足bi<=bi+1且bi<=10^9.

輸出僅一行,包含n個整數,從小到大輸出這n個最小的和,相鄰數字之間用空格隔開。

樣例輸入

3

2 6 6

1 4 8

樣例輸出

3 6 7
提示

對於50%的資料中,滿足1<=n<=1000;

對於100%的資料中,滿足1<=n<=100000。

題解:將兩個陣列歸併到一起(然而我沒歸併),從小到大開始列舉,列舉的數都是盡可能小的,但後面也數也有可能會比以前的書小,因此當列舉n個數之後,將只有比前n個數中最大的數小的入隊,如果列舉到比最大的數大,則進行下一輪列舉,因為後面的數也一定比最大的大。最後輸出前n個數。

#includeusing namespace std;

typedef long long ll;

const int maxn = 1e5+10;

const int inf = 0x3f3f3f3f;

struct node

c[2*maxn];

bool cmp(node x,node y)

for(;k<2*n;k++)

sort(c,c+2*n,cmp);

ll f=0,cnt=0,maxx=0;

for(int i=1;i<2*n;i++)

else }}

}while(!q.empty())

}cout

}

UVa 307 Sticks(暴力 剪枝)

給出一些木棍的長度,把這些木棍拼成長度相同的長木棍,求最短的長度。首先對所有木棍進行降序排序,然後開始列舉,列舉下界是小木棍長度的最大值,上界是小木棍長度之和的一半。在列舉的過程中必須進行剪枝,否則會超時。1 當前列舉的長木棍長度不是小木棍長的和的因數時跳過。2 與當前小木棍長度相同的小木棍沒有使用...

HDU5510Bazinga 暴力剪枝

題意 問是否存在最大的j在j之前的字串中有乙個不是j的子串,思路,剪枝 如果乙個串已經是某個串的子串,下次就可以不用再檢查他了,還有乙個,如果這個串前有比他長的串,那麼就可以直接判斷是ok的 include using namespace std define ll long long define...

美麗序列(暴力dp)

時間限制 c c 1秒,其他語言2秒 空間限制 c c 524288k,其他語言1048576k 64bit io format lld 第一行輸入乙個整數n 1 n 40 第二行輸入n個整數輸出乙個整數示例1 複製2 3 1複製 4示例2 複製3 5 3 1複製 2示例3 複製3 1 0 40複製...