제출 #110223

#제출 시각아이디문제언어결과실행 시간메모리
110223SamAndBali Sculptures (APIO15_sculpture)C++17
25 / 100
1086 ms14612 KiB
#include <bits/stdc++.h>
using namespace std;
const int N = 2003, M = 102;

int n;
int ll, rr;
int a[N];

void solv0()
{
    long long ans = (1LL << 62);
    for (int x = 0; x < (1 << n); ++x)
    {
        if ((x & (1 << 0)) == 0)
            continue;
        vector<long long> v;
        long long y = a[1];
        for (int i = 1; i < n; ++i)
        {
            if ((x & (1 << i)))
            {
                v.push_back(y);
                y = a[i + 1];
            }
            else
                y += a[i + 1];
        }
        v.push_back(y);
        long long yans = 0;
        for (int i = 0; i < v.size(); ++i)
            yans = yans | v[i];
        if (ll <= v.size() && v.size() <= rr)
            ans = min(ans, yans);
    }
    cout << ans << endl;
}

bool dp[M][M][1 << 12] = {};
void solv1()
{
    dp[0][0][0] = true;
    for (int i = 1; i <= n; ++i)
    {
        int s = 0;
        for (int j = i; j >= 1; --j)
        {
            s += a[j];
            for (int k = 0; k <= rr; ++k)
            {
                for (int x = 0; x < (1 << 12); ++x)
                {
                    if (!dp[j - 1][k][x])
                        continue;
                    dp[i][k + 1][x | s] = true;
                }
            }
        }
    }
    int ans = (1 << 12);
    for (int k = ll; k <= rr; ++k)
    {
        for (int x = 0; x < (1 << 12); ++x)
        {
            if (dp[n][k][x])
                ans = min(ans, x);
        }
    }
    cout << ans << endl;
}

int main()
{
    //freopen("input.txt", "r", stdin);
    cin >> n >> ll >> rr;
    for (int i = 1; i <= n; ++i)
        cin >> a[i];
    if (n <= 20)
        solv0();
    else
        solv1();
    return 0;
}

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

sculpture.cpp: In function 'void solv0()':
sculpture.cpp:30:27: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         for (int i = 0; i < v.size(); ++i)
                         ~~^~~~~~~~~~
sculpture.cpp:32:16: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         if (ll <= v.size() && v.size() <= rr)
             ~~~^~~~~~~~~~~
sculpture.cpp:32:40: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         if (ll <= v.size() && v.size() <= rr)
                               ~~~~~~~~~^~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...