제출 #881500

#제출 시각아이디문제언어결과실행 시간메모리
881500vjudge1Bank (IZhO14_bank)C++17
100 / 100
461 ms94376 KiB
#include<bits/stdc++.h>
using namespace std;
int n, m;
vector<int>a, b;
vector<int>sums; /// sums[i] -> sum of elements in the set i
vector<vector<int>>lookup;
int dp[20][(1 << 20)];
bool rec(int indx, int mask){
	bool res = 0;
	if(indx == n)return 1;
	if(dp[indx][mask] != -1)return dp[indx][mask];
	for(int &i : lookup[a[indx]]){
		if((mask & i) == i){
			res |= rec(indx + 1, mask ^ i);
		}
	}
	return dp[indx][mask] = res;
}
int main()
{
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	cin >> n >> m;
	a.resize(n);
	b.resize(m);
	sums.resize((1 << m));
	lookup.resize(2e4 + 3);
	for(int i = 0;i < n;++i){
		cin >> a[i];
	}
	for(int i = 0;i < m;++i){
		cin >> b[i];
	}
	for(int i = 0;i < (1 << m);++i){
		int sum = 0;
		for(int j = 0;j < m;++j){
			if((i & (1 << j))){
				sum += b[j];
			}
		}
		sums[i] = sum;
		lookup[sum].push_back(i);
	}
	for(int i = 0;i < 20;++i){
		for(int j = 0;j < (1 << 20);++j){
			dp[i][j] = -1;
		}
	}
 
	if(rec(0, (1 << m) - 1)){
		cout << "YES";
	}
	else{
		cout << "NO";
	}
}

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

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