結果
問題 | No.286 Modulo Discount Store |
ユーザー |
|
提出日時 | 2022-01-14 17:00:26 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 7 ms / 2,000 ms |
コード長 | 3,003 bytes |
コンパイル時間 | 2,943 ms |
コンパイル使用メモリ | 223,296 KB |
最終ジャッジ日時 | 2025-01-27 10:47:35 |
ジャッジサーバーID (参考情報) |
judge4 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 40 |
ソースコード
#include <bits/stdc++.h>using namespace std;#include <atcoder/convolution>#include <atcoder/modint>using namespace atcoder;//基本的にこれがなくてもうまくいくコードを心がけるが、念の為。時間ギリギリアウトの時は消してみる#define int long longtypedef long long ll;typedef unsigned long long ull;typedef double db;typedef long double ldb;typedef pair<int, int> pi;typedef pair<long long, long long> pl;typedef vector<int> vi;typedef vector<long long> vl;typedef vector<vector<int> > vvi;typedef vector<vector<long long> > vvl;typedef priority_queue<int> pq;typedef priority_queue<int, vector<int>, greater<int> > pqg;typedef priority_queue<long long> pql;typedef priority_queue<long long, vector<long long>, greater<long long> > pqgl;#define pb push_back#define eb emplace_back#define mp make_pair#define all(obj) (obj).begin(), (obj).end()#define reps(i, n, m) for (int i = (int)(n); i < (int)(m); i++)#define rep(i, n) for (int i = 0; i < (int)(n); i++)#define rrep(i, n) for (int i = n; i >= 0; i--)#define cbit(x) __builtin_popcountll(x)#define minv(v) *min_element(v.begin(), v.end())#define maxv(v) *max_element(v.begin(), v.end())#define print(v) \for (auto k : v) cout << k << " "; \cout << endl;#define yesno(bool) \if (bool) { \cout << "Yes" << endl; \} else { \cout << "No" << endl; \}//既存値aより新規値bが大きければ更新template <class T>bool chmax(T &a, const T &b) {if (a < b) {a = b;return 1;}return 0;}//既存値aより新規値bが小さければ更新template <class T>bool chmin(T &a, const T &b) {if (b < a) {a = b;return 1;}return 0;}#define ednl endl //打ち間違え用#define enld endl#define Endl endlint dx[4] = {1, 0, -1, 0};int dy[4] = {0, 1, 0, -1};// int dx[8] = {1, 1, 1, 0, -1, -1, -1, 0};// int dy[8] = {-1, 0, 1, 1, 1, 0, -1, -1};// const int MOD = 998244353; //素数(223*119+1)// const int MOD = 1000000007; //素数// using mint = modint998244353;// using mint = modint1000000007;// using mint = static_modint<1000000009>;////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////signed main() {int n;cin >> n;vi m(n);rep(i, n) cin >> m[i];int inf = 1e8;vi d(1 << n, inf);d[0] = 0;rep(msk, 1 << n) {int sum = 0;rep(i, n) {if (msk & (1 << i)) {sum += m[i];}}rep(i, n) {if (msk & (1 << i)) {d[msk] = min(d[msk], d[msk & ~(1 << i)] + m[i] -min(m[i], (sum - m[i]) % 1000));}}}cout << d[(1 << n) - 1] << endl;}