답안 #426589

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
426589 2021-06-14T07:20:44 Z 조영욱(#7645) Ancient Machine (JOI21_ancient_machine) C++17
컴파일 오류
0 ms 0 KB
#include "Bruno.h"
#include <bits/stdc++.h>
using namespace std;

namespace {

int dp[262144];
int pr[262144];
int arr[18];
int n;
int ans(int bit) {
    if (bit==0) {
        return 0;
    }
    if (dp[bit]!=-1) {
        return dp[bit];
    }
    int ret=0;
    for(int i=0;i<n;i++) {
        if (bit&(1<<i)) {
            if (arr[i]!=1) {
                if (ans(bit-(1<<i))>=ret) {
                    pr[bit]=i;
                }
                ret=max(ret,ans(bit-(1<<i)));
                continue;
            }
            bool flag1=false;
            bool flag2=false;
            for(int j=i-1;j>=0;j--) {
                if (bit&(1<<j)) {
                    if (arr[j]==0) {
                        flag1=true;
                    }
                    break;
                }
            }
            for(int j=i+1;j<n;j++) {
                if (bit&(1<<j)) {
                    if (arr[j]==2) {
                        flag2=true;
                    }
                    break;
                }
            }
            if (flag1&flag2){
                if (ans(bit-(1<<i))+1>=ret) {
                    pr[bit]=i;
                }
                ret=max(ret,ans(bit-(1<<i))+1);
            }
            else {
                if (ans(bit-(1<<i))>=ret) {
                    pr[bit]=i;
                }
                ret=max(ret,ans(bit-(1<<i)));
            }
        }
    }
    return dp[bit]=ret;
}
}  // namespace

void Bruno(int nn,int l,vector<int> v) {
    n=nn;
  for (int i = 0;i<l;i+=2) {
    arr[i/2]=arr[i]*2+arr[i+1];
  }
  memset(dp,-1,sizeof(dp));
  int now=(1<<n)-1;
  for(int i=0;i<n;i++) {
        ans(now);
    Remove(pr[now]);
    now-=(1<<pr[now]);
  }
}
#include "Bruno.h"
#include <bits/stdc++.h>
using namespace std;

namespace {

int dp[262144];
int pr[262144];
int arr[18];
int n;
int ans(int bit) {
    if (bit==0) {
        return 0;
    }
    if (dp[bit]!=-1) {
        return dp[bit];
    }
    int ret=0;
    for(int i=0;i<n;i++) {
        if (bit&(1<<i)) {
            if (arr[i]!=1) {
                if (ans(bit-(1<<i))>=ret) {
                    pr[bit]=i;
                }
                ret=max(ret,ans(bit-(1<<i)));
                continue;
            }
            bool flag1=false;
            bool flag2=false;
            for(int j=i-1;j>=0;j--) {
                if (bit&(1<<j)) {
                    if (arr[j]==0) {
                        flag1=true;
                    }
                    break;
                }
            }
            for(int j=i+1;j<n;j++) {
                if (bit&(1<<j)) {
                    if (arr[j]==2) {
                        flag2=true;
                    }
                    break;
                }
            }
            if (flag1&flag2){
                if (ans(bit-(1<<i))+1>=ret) {
                    pr[bit]=i;
                }
                ret=max(ret,ans(bit-(1<<i))+1);
            }
            else {
                if (ans(bit-(1<<i))>=ret) {
                    pr[bit]=i;
                }
                ret=max(ret,ans(bit-(1<<i)));
            }
        }
    }
    return dp[bit]=ret;
}
}  // namespace

void Bruno(int nn,int l,vector<int> v) {
    n=nn;
  for (int i = 0;i<l;i+=2) {
    arr[i/2]=arr[i]*2+arr[i+1];
  }
  memset(dp,-1,sizeof(dp));
  int now=(1<<n)-1;
  for(int i=0;i<n;i++) {
        ans(now);
    Remove(pr[now]);
    now-=(1<<pr[now]);
  }
}

Compilation message

/usr/bin/ld: /tmp/cc3TNbcF.o: in function `main':
grader_anna.cpp:(.text.startup+0x14c): undefined reference to `Anna(int, std::vector<char, std::allocator<char> >)'
/usr/bin/ld: /tmp/ccjrscuF.o: in function `Bruno(int, int, std::vector<int, std::allocator<int> >)':
Anna.cpp:(.text+0x25b): undefined reference to `Remove(int)'
collect2: error: ld returned 1 exit status