Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std;
- #define endl "\n"
- #define LagaKar ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL)
- #define pb push_back
- #define pf push_front
- #define pob pop_back
- #define pof pop_front
- #define mp make_pair
- #define fi first
- #define se second
- #define precise(ans) cout<<fixed<<setprecision(15)<<ans
- #define fo(i,n) for(ll i=0;i<n;i++)
- #define Fo(i,k,n) for(ll i=k;k<n?i<n:i>n;k<n?i+=1:i-=1)
- #define tr(it, a) for(auto it = a.begin(); it != a.end(); it++)
- #define sz(x) ((ll)(x).size())
- #define all(x) x.begin(), x.end()
- #define PI 3.1415926535897932384626
- #define MOD 1000000007
- #define MOD1 998244353
- typedef long long ll; typedef unsigned long long ull; typedef long double lld; typedef pair<ll, ll> pii; typedef pair<ll, ll> pl; typedef vector<ll> vi; typedef vector<vi> vvi; typedef vector<vvi> vvvi; typedef vector<ll> vl; typedef vector<vl> vvl; typedef vector<pii> vpii; typedef vector<pl> vpl; template <typename T> using prq_mx = priority_queue<T>; template <typename T> using prq_mn = priority_queue<T, vector<T>, greater<T>>;
- const double eps = 1e-9; const ll INF = (ll) 1e9; const ll inf64 = 2e18; const ll INF64 = 9e18;
- #ifndef ONLINE_JUDGE
- #define debug(x) cerr << #x <<" "; _prll(x); cerr << endl;
- #else
- #define debug(x)
- #endif
- void _prll(ll t) {cerr << t;} void _print(ll t) {cerr << t;} void _prll(string t) {cerr << t;} void _prll(char t) {cerr << t;} void _prll(lld t) {cerr << t;} void _prll(double t) {cerr << t;} void _prll(ull t) {cerr << t;} template <class T, class V> void _prll(pair <T, V> p); template <class T> void _prll(vector <T> v); template <class T> void _prll(set <T> v); template <class T, class V> void _prll(map <T, V> v); template <class T> void _prll(multiset <T> v); template <class T, class V> void _prll(pair <T, V> p) {cerr << "{"; _prll(p.fi); cerr << ","; _prll(p.se); cerr << "}";} template <class T> void _prll(vector <T> v) {cerr << "[ "; for (T i : v) {_prll(i); cerr << " ";} cerr << "]";} template <class T> void _prll(set <T> v) {cerr << "[ "; for (T i : v) {_prll(i); cerr << " ";} cerr << "]";} template <class T> void _prll(multiset <T> v) {cerr << "[ "; for (T i : v) {_prll(i); cerr << " ";} cerr << "]";} template <class T, class V> void _prll(map <T, V> v) {cerr << "[ "; for (auto i : v) {_prll(i); cerr << " ";} cerr << "]";}
- //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- /////////////////////////////////////////////////////////////////////////////////////////////////
- const ll N=21;
- ll dp[1ll<<21];
- ll n;
- ll rec(ll mask,vl& aa){
- ll val=__builtin_popcount(mask);
- if((n-val)<3)return 0;
- if(dp[mask]!=-1)return dp[mask];
- ll sum=0;
- fo(i,n){
- if((mask&(1ll<<i))==0){
- sum+=aa[i];
- }
- }
- queue<pl> q;
- // vl cc;
- ll s=0,ans=INF64,m1=mask;
- fo(i,n+3){
- ll j=(i%n);
- if((mask&(1ll<<j))==0){
- while(q.size()>=3){
- pl x=q.front();
- q.pop();
- s-=x.fi;
- m1^=(1ll<<x.se);
- }
- q.push({aa[j],j});
- s+=aa[j];
- m1|=(1ll<<j);
- if(q.size()==3){
- // cc.pb(s);
- ans=min(ans,sum-s+rec(m1,aa));
- }
- }
- }
- // cerr<<val<<" "<<ans<<" "<<sum<<" "<<mask<<endl;
- // fo(i,n){
- // if((mask&(1ll<<i))==0){
- // cerr<<i<<"-";
- // }
- // }
- // cerr<<endl;
- // debug(cc);
- return dp[mask]=ans;
- }
- void chal(){
- cin>>n;
- vl aa(n);
- fo(i,n){
- cin>>aa[i];
- }
- // debug(aa);
- memset(dp,-1,sizeof(dp));
- cout<<rec(0,aa)<<endl;
- }
- //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- int32_t main() {
- LagaKar;
- #ifndef ONLINE_JUDGE
- freopen("input.txt", "r", stdin); freopen("output.txt", "w", stdout); freopen("Error.txt", "w", stderr);
- #endif
- ll t; t = 1;
- // cin>>t;
- for (ll i = 1; i <= t; i++) {
- chal();
- } return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment