제출 #1226698

#제출 시각아이디문제언어결과실행 시간메모리
1226698nanaseyuzukiKronican (COCI16_kronican)C++20
0 / 100
2096 ms43528 KiB
#include <bits/stdc++.h> using namespace std; #define fi first #define se second #define pii pair<int, int> const int mn = 21, inf = 1e18; int n, k, a[mn][mn]; int dp[mn][(1 << 19) + 1]; void solve(){ cin >> n >> k; for(int i = 0; i < n; i++){ for(int j = 0; j < n; j++){ cin >> a[i][j]; } } fill(&dp[0][0], &dp[0][0] + mn * ((1 << 19) + 1), inf); for(int mask = 0; mask < (1 << n); mask++){ vector <int> cand; for(int i = 0; i < n; i++){ if(mask & (1 << i)) cand.push_back(i); } dp[1][mask] = INT_MAX; for(auto i : cand){ int val = 0; for(auto j : cand){ val += a[i][j]; } dp[1][mask] = min(dp[1][mask], val); } } dp[1][0] = 0; for(int i = 2; i <= k; i++){ for(int mask = 0; mask < (1 << n); mask++){ dp[i][mask] = dp[i - 1][mask]; for(int sub = mask; sub; sub = (sub - 1) & mask){ dp[i][mask] = min(dp[i - 1][sub] + dp[1][mask - sub], dp[i][mask]); } } } cout << dp[k][(1 << n) - 1]; } signed main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); int t = 1; // cin >> t; while(t--){ solve(); } return 0; }

컴파일 시 표준 에러 (stderr) 메시지

kronican.cpp:6:26: warning: overflow in conversion from 'double' to 'int' changes value from '1.0e+18' to '2147483647' [-Woverflow]
    6 | const int mn = 21, inf = 1e18;
      |                          ^~~~
#Verdict Execution timeMemoryGrader output
Fetching results...