Hello, can any one please tell how to solve This problem
№ | Пользователь | Рейтинг |
---|---|---|
1 | tourist | 3985 |
2 | jiangly | 3814 |
3 | jqdai0815 | 3682 |
4 | Benq | 3529 |
5 | orzdevinwang | 3526 |
6 | ksun48 | 3517 |
7 | Radewoosh | 3410 |
8 | hos.lyric | 3399 |
9 | ecnerwala | 3392 |
9 | Um_nik | 3392 |
Страны | Города | Организации | Всё → |
№ | Пользователь | Вклад |
---|---|---|
1 | cry | 169 |
2 | maomao90 | 162 |
2 | Um_nik | 162 |
4 | atcoder_official | 161 |
5 | djm03178 | 158 |
6 | -is-this-fft- | 157 |
7 | adamant | 155 |
8 | Dominater069 | 154 |
8 | awoo | 154 |
10 | luogu_official | 150 |
Hello, can any one please tell how to solve This problem
Название |
---|
Well, if n was
<= 20
we could've simply ran through every subset of the the array, butn <= 40
. Observe that 40 is still pretty close to 20.So what should we do?
We are going to use the Meet in the Middle algorithm (also the name of the task
:)
) to solve this problem. That means that we generate all sums for all subsets of the first half and the second half of the array separately. That way time complexity isO (2^(n/2)*n)
Now that we have the sums for both halves we want to find in how many ways we can pair two from different halves so that we get x.
We can do that easily by sorting the sum arrays of both halves and use the two pointers method.