結果
問題 |
No.1345 Beautiful BINGO
|
ユーザー |
|
提出日時 | 2021-01-20 22:58:16 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
WA
(最新)
AC
(最初)
|
実行時間 | - |
コード長 | 1,725 bytes |
コンパイル時間 | 2,116 ms |
コンパイル使用メモリ | 176,044 KB |
実行使用メモリ | 6,824 KB |
最終ジャッジ日時 | 2024-12-23 14:38:32 |
合計ジャッジ時間 | 8,701 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 50 WA * 11 |
ソースコード
#include <bits/stdc++.h> #define rep(i,n) for(int i=0;i<(int)(n);i++) #define chmin(x,y) x = min((x),(y)); #define chmax(x,y) x = max((x),(y)); using namespace std; using ll = long long ; using P = pair<int,int> ; using pll = pair<long long,long long>; const int INF = 1e9; const long long LINF = 1e17; const int MOD = 1000000007; //const int MOD = 998244353; const double PI = 3.14159265358979323846; int a[20][20]; int main(){ int n,m; cin >> n >> m; rep(i,n)rep(j,n) cin >> a[i][j]; ll ans = LINF; rep(mask,4){ ll res = 0; int t = 0; vector<vector<int>> maze(n,vector<int>(n,0)); if(mask&1){ ++t; rep(i,n){ maze[i][i] = 1; res += a[i][i]; } } if(mask>>1&1){ ++t; rep(i,n){ if(maze[i][n-i-1]==1) continue; maze[i][n-i-1] = 1; res += a[i][n-i-1]; } } for(int bit=0;bit<(1<<n);bit++){ int pop = __builtin_popcount(bit) + t; ll ret = 0; rep(i,n){ if(bit>>i&1){ rep(j,n){ if(maze[i][j]==0) ret += a[i][j]; } } } int num = m - pop; vector<int> b(n,0); rep(i,n){ rep(j,n){ if(bit>>j&1) continue; if(maze[j][i]==1) continue; b[i] += a[j][i]; } } sort(b.begin(),b.end()); rep(i,num) ret += b[i]; chmin(ans,res+ret); } } cout << ans << endl; return 0; }