제출 #416865

#제출 시각아이디문제언어결과실행 시간메모리
416865snasibov05Detecting Molecules (IOI16_molecules)C++14
10 / 100
3 ms664 KiB
#include "molecules.h"
#include <algorithm>

using namespace std;

#define pb push_back

vector<vector<vector<bool>>> knapsack(vector<int>& w){
    int n = w.size();

    int sum = 0;
    for (int i = 0; i < n; ++i) sum += w[i];

    vector<vector<vector<bool>>> dp(2, vector<vector<bool>>(n, vector<bool>(sum+1)));
    dp[1][0][w[0]] = true;
    dp[0][0][0] = true;

    for (int i = 0; i < n - 1; ++i) {
        for (int j = 0; j <= sum; ++j) {
            if (dp[0][i][j] || dp[1][i][j]){
                dp[0][i+1][j] = true;
                dp[1][i+1][j + w[i+1]] = true;
            }
        }
    }

    return dp;
}

vector<int> find_subset(int l, int u, vector<int> w) {

    int n = w.size();
    vector<vector<vector<bool>>> dp = knapsack(w);

    int res = -1;
    for (int i = l; i <= u && i < dp[n-1].size(); ++i) {
        if (dp[1][n-1][i] || dp[0][n-1][i]) {
            res = i;
            break;
        }
    }

    vector<int> ans;
    if (res == -1) return ans;
    for (int i = n-1; i >= 0; --i){
        if (dp[1][i][res]){
            ans.pb(i);
            res -= w[i];
        }
    }
    reverse(ans.begin(), ans.end());
    return ans;

}

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

molecules.cpp: In function 'std::vector<int> find_subset(int, int, std::vector<int>)':
molecules.cpp:36:33: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::vector<bool> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   36 |     for (int i = l; i <= u && i < dp[n-1].size(); ++i) {
      |                               ~~^~~~~~~~~~~~~~~~
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...