| # | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
|---|---|---|---|---|---|---|---|
| 1336690 | pn197 | 은행 (IZhO14_bank) | C++17 | 100 ms | 8640 KiB |
#include <bits/stdc++.h>
using namespace std;
const int N=24, MASK=(1<<20)+4, mod=1e9+7;
int n, m, a[N], b[N], dp[MASK], lastsum[MASK];
bool ans;
int main()
{
ios::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
cin >> n >> m;
for(int i=1;i<=n;++i)
cin >> a[i];
for(int j=1;j<=m;++j)
cin >> b[j];
for(int mask=1;mask<(1<<m);++mask){
dp[mask]=-1;
for(int i=1;i<=m;++i){
if(mask&(1<<(i-1))){
int lastmask=mask^(1<<(i-1));
int cnt=dp[lastmask];
if(cnt==n) continue;
if(lastsum[lastmask]+b[i]<a[cnt+1]){
if(dp[mask]<dp[lastmask]){
dp[mask]=dp[lastmask];
lastsum[mask]=lastsum[lastmask]+b[i];
}
}
else if(lastsum[lastmask]+b[i]==a[cnt+1]){
if(dp[mask]<dp[lastmask]+1){
dp[mask]=dp[lastmask]+1;
lastsum[mask]=0;
}
}
if(dp[mask]==n) ans=1;
}
}
}
if(ans)
cout << "YES";
else cout << "NO";
return 0;
}
| # | Verdict | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
