結果

提出番号 1693
提出者 popo
言語 C++
提出日時 2018-08-04 13:31:17
問題名 (70)アルゴリズムのお勉強
結果 CE
点数 0%

テストケース

テストケース 結果 得点 実行時間 メモリ使用量
1 CE 0% 0ms 0KB
2 CE 0% 0ms 0KB
3 CE 0% 0ms 0KB
4 CE 0% 0ms 0KB
5 CE 0% 0ms 0KB
6 CE 0% 0ms 0KB
7 CE 0% 0ms 0KB
8 CE 0% 0ms 0KB
9 CE 0% 0ms 0KB
10 CE 0% 0ms 0KB
11 CE 0% 0ms 0KB
12 CE 0% 0ms 0KB
13 CE 0% 0ms 0KB
14 CE 0% 0ms 0KB
15 CE 0% 0ms 0KB
16 CE 0% 0ms 0KB
17 CE 0% 0ms 0KB
18 CE 0% 0ms 0KB
19 CE 0% 0ms 0KB
20 CE 0% 0ms 0KB
21 CE 0% 0ms 0KB
22 CE 0% 0ms 0KB
23 CE 0% 0ms 0KB
24 CE 0% 0ms 0KB
25 CE 0% 0ms 0KB
26 CE 0% 0ms 0KB
27 CE 0% 0ms 0KB
28 CE 0% 0ms 0KB
29 CE 0% 0ms 0KB
30 CE 0% 0ms 0KB

ソースコード

#include <bits/stdc++.h>
#define r(i,n) for(int i=0;i<n;i++)
using namespace std;

int dp[1<<16];
int n,t[55],a[55][55];

int main(){
  cin>>n;
  r(i,n)cin>>t[i];
  r(i,n)r(j,n)cin>>a[i][j];
  r(i,1<<16)r(j,16)dp[i][j]=1e9;
  dp[0][0]=0;
  for(int i=0;i<(1<<n);i++){
    for(int j=0;j<n;j++){
      if(dp[i][j]==1e9)continue;
      for(int k=0;k<n;k++){
        if(i&(1<<k))continue;
        int s=t[k];
        r(l,n)if(i&(1<<l))s-=a[l][k];
        dp[i|(1<<k)][k]=min(dp[i|(1<<k)][k],dp[i][j]+s);
      }
    }
  }
  int ans=1e9;
  r(i,n)ans=min(ans,dp[(1<<n)-1][i]);
  cout<<ans<<endl;
}