Advertisement
Guest User

Untitled

a guest
Nov 26th, 2016
209
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.25 KB | None | 0 0
  1. #include "bits/stdc++.h"
  2. #define MAXN 100009
  3. #define INF 1000000007
  4. #define mp(x,y) make_pair(x,y)
  5. #define all(v) v.begin(),v.end()
  6. #define pb(x) push_back(x)
  7. #define wr cout<<"----------------"<<endl;
  8. #define ppb() pop_back()
  9. #define tr(ii,c) for(typeof((c).begin()) ii=(c).begin();ii!=(c).end();ii++)
  10. #define ff first
  11. #define ss second
  12.  
  13. using namespace std;
  14.  
  15. typedef long long ll;
  16. typedef pair<int,int> PII;
  17. template<class T>bool umin(T& a,T b){if(a>b){a=b;return 1;}return 0;}
  18. template<class T>bool umax(T& a,T b){if(a<b){a=b;return 1;}return 0;}
  19. int arr[22][22];
  20. int n,k,ans=INF;
  21. int dp[(1<<20)+5],limit;
  22. int rec(int mask){
  23. if(mask==limit-1)
  24. return 0;
  25. int &ret=dp[mask];
  26. if(~ret)
  27. return ret;ret=INF;
  28. for(int i=0;i<n;i++)
  29. if(!(mask&(1<<i))){
  30. int res=INF;
  31. for(int k=0;k<n;k++)
  32. if((mask&(1<<k)))
  33. umin(res,arr[i][k]);
  34. umin(ret,rec(mask|(1<<i))+res);
  35. }
  36. return ret;
  37. }
  38. int main(){
  39. memset(dp,-1,sizeof dp);
  40. #ifndef ONLINE_JUDGE
  41. freopen("file.in", "r", stdin);
  42. #endif
  43. scanf("%d%d",&n,&k);
  44. for(int i=0;i<n;i++)
  45. for(int j=0;j<n;j++)
  46. scanf("%d",&arr[i][j]);
  47. limit=(1<<n);
  48. for(int i=1;i<limit;i++)
  49. if(__builtin_popcount(i)==k)
  50. umin(ans,rec(i));
  51. printf("%d\n",ans);
  52. return 0;
  53. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement