제출 #679223

#제출 시각아이디문제언어결과실행 시간메모리
679223vjudge1은행 (IZhO14_bank)C++17
100 / 100
315 ms90316 KiB
#include <bits/stdc++.h>

using namespace std;
#define ll long long
#define ull unsigned long long
#define oo 1e9

vector<vector<int>> convertToMask(20001);
int arr[20];
int dp[1 << 20][20];

int n;

bool rec(int mask, int i){
    if(i == n){
        return true;
    }
    if(dp[mask][i] != -1) return dp[mask][i];
    for (int j : convertToMask[arr[i]])
    {
        if((mask & j) == 0){
            if(rec(mask + j, i + 1)){
                return dp[mask][i] = true;
            }
        }
    }
    return dp[mask][i] = false;
}

int main(){
    memset(dp, -1, sizeof(dp));
    int m; cin >> n >> m;
    int banknotes[m];
    for (int i = 0; i < n; i++)
    {
        cin >> arr[i];
    }
    for (int i = 0; i < m; i++)
    {
        cin >> banknotes[i];
    }
    for (int mask = 1; mask < (1 << m); mask++)
    {
        int sum = 0;
        for (int i = 0; i < m; i++)
        {
            if(mask & (1 << i)){
                sum += banknotes[i];
            }
        }
        convertToMask[sum].push_back(mask);
    }
    bool ans = rec(0, 0);
    if(ans) cout << "YES";
    else cout << "NO";
}

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

bank.cpp: In function 'bool rec(int, int)':
bank.cpp:23:36: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
   23 |                 return dp[mask][i] = true;
      |                        ~~~~~~~~~~~~^~~~~~
bank.cpp:27:24: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
   27 |     return dp[mask][i] = false;
      |            ~~~~~~~~~~~~^~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...