#include <bits/stdc++.h>
#include <iostream>
using namespace std;
vector<uint16_t> paczki;
vector<unsigned long long> zbiory(5003, 0);
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
uint16_t N;
cin >> N;
for (int i = 0; i < N; ++i)
{
uint16_t paczka;
cin >> paczka;
paczki.push_back(paczka);
}
sort(paczki.begin(), paczki.end());
zbiory[0] = 1;
for (auto p : paczki)
{
const vector<unsigned long long> zbioryCopy = zbiory;
for (int i = p - 1; i < 5002; ++i)
if (i + p <= 5000)
zbiory[i + p] = (zbiory[i + p] + zbioryCopy[i]) % 1000000007;
else
zbiory[5001] = (zbiory[5001] + zbioryCopy[i]) % 1000000007;
}
unsigned long long ans = 0;
for (int i = 1; i < 5003; ++i)
ans = (ans + zbiory[i]) % 1000000007;
cout << ans;
return 0;
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | #include <bits/stdc++.h> #include <iostream> using namespace std; vector<uint16_t> paczki; vector<unsigned long long> zbiory(5003, 0); int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); uint16_t N; cin >> N; for (int i = 0; i < N; ++i) { uint16_t paczka; cin >> paczka; paczki.push_back(paczka); } sort(paczki.begin(), paczki.end()); zbiory[0] = 1; for (auto p : paczki) { const vector<unsigned long long> zbioryCopy = zbiory; for (int i = p - 1; i < 5002; ++i) if (i + p <= 5000) zbiory[i + p] = (zbiory[i + p] + zbioryCopy[i]) % 1000000007; else zbiory[5001] = (zbiory[5001] + zbioryCopy[i]) % 1000000007; } unsigned long long ans = 0; for (int i = 1; i < 5003; ++i) ans = (ans + zbiory[i]) % 1000000007; cout << ans; return 0; } |
English