제출 #1025411

#제출 시각아이디문제언어결과실행 시간메모리
1025411ef10은행 (IZhO14_bank)C++17
71 / 100
1061 ms8616 KiB
// Source: https://usaco.guide/general/io #include <bits/stdc++.h> using namespace std; int N,M; int A[21]; int B[21]; int dp[1<<20][2]; int main() { cin >> N >> M; for (int i = 1; i <= N; i++) { cin >> A[i]; } for (int i = 0; i < M; i++) { cin >> B[i]; } for (int i = 0; i < (1<<M); i++) { for (int j = 0; j <= 1; j++) { dp[i][j] = -1; } } dp[0][0] = 0; for (int i = 0; i < (1<<M); i++) { dp[i][0]=0; for (int k = 0; k < M; k++) { if (i&(1<<k)) { dp[i][0] += B[k]; } } if (dp[i][0] > A[1]) { dp[i][0] = -1; } } int ind; for (int i = 1; i <= N; i++) { ind = i % 2; int oi = (i+1) % 2; for (int j = 0; j < (1 << M); j++) { for (int k = 0; k < M; k++) { if (!(j&(1<<k))) continue; if (i < N && dp[j&~(1<<k)][ind] >= 0 && dp[j&~(1<<k)][ind] + B[k] < A[i+1]) { dp[j][ind] = dp[j&~(1<<k)][ind] + B[k]; } if (dp[j&~(1<<k)][oi] < 0) continue; if (dp[j&~(1<<k)][oi] + B[k] == A[i]) { dp[j][ind] = 0; } } } for (int i = 0; i < (1<<M); i++) { dp[i][oi] = -1; } } for (int i = 0; i < (1<<M); i++) { if (dp[i][ind] >= 0) { cout << "YES" << endl; return 0; } } cout << "NO" << endl; }

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

bank.cpp: In function 'int main()':
bank.cpp:36:6: warning: 'ind' may be used uninitialized in this function [-Wmaybe-uninitialized]
   36 |  int ind;
      |      ^~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...