답안 #938742

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
938742 2024-03-05T13:36:09 Z vjudge1 Kitchen (BOI19_kitchen) C++17
0 / 100
1 ms 348 KB
#include <bits/stdc++.h>
#define int long long
using namespace std;

signed main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    int n,m,k;
    cin >> n >> m >> k;
    vector<int> a(n),b(m);
    for (int i = 0; i < n; i++)
        cin >> a[i];
    for (int i = 0; i < m; i++)
        cin >> b[i];
    sort(b.begin(),b.end());
    int oth = 0;
    for (int i = 0; i < n; i++)
        oth+=a[i];
        
    if (k > m)
        {
        cout << "Impossible\n";
        return 0;
        }
   /* if (k == 1)
    {
    int sum = 0LL;
    for (int i = 0; i < m; i++)
        sum+=b[i];
    vector<vector<bool>> dp(m,vector<bool>(sum+1));
    dp[0][0] = 1;
    dp[0][b[0]] = 1;
    for (int i = 1; i < m; i++)
        for (int j = 0; j <= sum; j++)
        {
            if (j-b[i] >= 0)
                dp[i][j] = (dp[i-1][j-b[i]] | dp[i-1][j]);
            else
                dp[i][j] = dp[i-1][j];
        }

    
    for (int i = oth; i <= sum; i++)
        if (dp[m-1][i])
        {
            cout << i-oth << '\n';
            return 0;
        }
    cout << "Impossible\n";
    }
    else
    */
    {
        if(m > 15)
        {
            cout << "DARJAN JUGOVIC I LOVE YOU\n";
            return 0;
        }
        int cost = -1;
        for (int mask = 1; mask < (1<<(m+1)); mask++)
        {
            vector<int> arr;
            for (int i = 0; i < m; i++)
                if (mask&(1<<i))
                    arr.push_back(b[i]);
            if (k > arr.size())
                continue;
            int g = arr.size();
            int sum = 0;
            int minus = 0;
            for (int i = 0; i < g; i++)
                sum+=arr[i];
            if (oth > sum)
                continue;
            
            for (int i = 0; i < g-k+1; i++)
            {
                minus+=arr[i];
                if (minus >= n)
                {
                    cost = max(cost,sum-oth);
                    break;
                }
                int oduz = arr[i];
                for (int j = i; j < i+k; j++)
                {
                    arr[i]-=oduz;
                }
            }
        }
        if (cost == -1)
        {
            cout << "Impossible\n";
            return 0;
        }
        else
            cout << cost << '\n';
        
    }
    return 0;
}

Compilation message

kitchen.cpp: In function 'int main()':
kitchen.cpp:69:19: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   69 |             if (k > arr.size())
      |                 ~~^~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 348 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 348 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 348 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 348 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 348 KB Output isn't correct
2 Halted 0 ms 0 KB -