제출 #317320

#제출 시각아이디문제언어결과실행 시간메모리
317320fadi57Kronican (COCI16_kronican)C++14
100 / 100
1435 ms8704 KiB
#include <bits/stdc++.h>
using namespace std;
const long long mx=21;
const long long mod=1e9+7;
typedef long long ll;
int a[mx][mx];
int dp[1<<mx];int k;int n,m;
int solve(int mask){
     if (__builtin_popcount(mask) == k) return 0;
     int &ret=dp[mask];
    
     if(ret!=-1){return ret;}
     ret=1<<30;
     for(int i=0;i<n;i++){
         if(!(mask&(1<<i))){continue;}
         for(int j=0;j<n;j++){
             if(i==j){continue;}
              if(!(mask&(1<<j))){continue;}
           
                  ret=min(ret,solve(mask^(1<<i))+a[i][j]);
         }
     }
    return ret;
    
    
}



int main() { 
memset(dp,-1,sizeof(dp));
cin>>n>>k;
for(int i=0;i<n;i++){
    for(int j=0;j<n;j++){
    cin>>a[i][j];//cout<<a[i][j];
        
    }
}
cout<<solve((1<<n)-1);

}
#Verdict Execution timeMemoryGrader output
Fetching results...