Submission #883673

#TimeUsernameProblemLanguageResultExecution timeMemory
883673vjudge1Kronican (COCI16_kronican)C++17
100 / 100
644 ms8788 KiB
#ifndef Local #pragma GCC optimize("O3,unroll-loops") const int lim=2e5+100; #else const int lim=1e3+100; #endif #include "bits/stdc++.h" using namespace std; #define int long long #define pb push_back const int mod=1e9+7; using pii=pair<int,int>; inline void solve(){ int n,k; cin>>n>>k; int a[n][n]; for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ cin>>a[i][j]; } } int inf=INT_MAX*100ll; int ans=inf; int dp[1<<n]; for(int i=0;i<(1<<n);i++)dp[i]=inf; dp[(1<<n)-1]=0; for(int m=(1<<n)-1;m;m--){ //cerr<<(bitset<5>(m))<<" "<<dp[m]<<"\n"; for(int i=0;i<n;i++){ if(m&(1<<i)){ for(int j=0;j<n;j++){ if(m&(1<<j)&&(i^j)){ //cerr<<"update "<<(bitset<5>(m^(1<<i)))<<" "<<dp[m]+a[i][j]<<"\n"; dp[m^(1<<i)]=min(dp[m^(1<<i)],dp[m]+a[i][j]); } } } } if(__popcount(m)<=k){ ans=min(ans,dp[m]); } } cout<<ans<<"\n"; } signed main(){ ios_base::sync_with_stdio(false); cin.tie(NULL);cout.tie(NULL); #ifdef Local freopen(".in","r",stdin); freopen(".out","w",stdout); #else //freopen("grass.in","r",stdin); //freopen("grass.out","w",stdout); #endif int t=1; //cin>>t; while (t--) { solve(); } }
#Verdict Execution timeMemoryGrader output
Fetching results...