C++ Classis任务,用于将重量分成两辆卡车(C+;+;)(动态规划)

C++ Classis任务,用于将重量分成两辆卡车(C+;+;)(动态规划),c++,dynamic-programming,C++,Dynamic Programming,我有一项任务,根据给定的笼子重量线,我必须将它们分成两辆卡车。拆分应这样进行,即| a-b |具有最小值,其中“a”是第一辆卡车中保持架的共同重量,“b”是第二辆卡车保持架的共同重量。我的程序似乎可以运行,但当我将其上传到hackerrank时,会调用abort函数。那我的错在哪里?代码如下: #include <iostream> #include <vector> #include <sstream> #include <cstring> us

我有一项任务,根据给定的笼子重量线,我必须将它们分成两辆卡车。拆分应这样进行,即| a-b |具有最小值,其中“a”是第一辆卡车中保持架的共同重量,“b”是第二辆卡车保持架的共同重量。我的程序似乎可以运行,但当我将其上传到hackerrank时,会调用abort函数。那我的错在哪里?代码如下:

#include <iostream>
#include <vector>
#include <sstream>
#include <cstring>
using namespace std;


int main()
{
    string input;
    int k;

    while (getline(cin, input))
    {
        /* splitting the input into integers */
        vector<int> v;
        istringstream iss(input);
        while (iss >> k) v.push_back(k);
        /* --- II --- */

        unsigned long sum = 0;
        unsigned i, j;
        for (i = 0; i < v.size(); i++)
            sum += v[i];

        vector<char> can;
        can.push_back(1);
        for (i = 1; i <= sum; i++)
            can[i] = 0;

        for (i = 0; i < v.size(); i++)
        {
            for (j = sum; j+1 > 0; j--)
            {
                if (can[j])
                {
                    can[j + v[i]] = 1;
                }
            }
        }

        for (i = sum / 2; i > 1; i--)
        {
            if (can[i])
            {
                if (i <= sum - i)
                {
                     cout << i << " " << sum - i << endl;
                    break;
                }

                else
                {
                    cout << "a should be <= b";
                    break;
                }
            }
        }
    }
    return 0;
}
#包括
#包括
#包括
#包括
使用名称空间std;
int main()
{
字符串输入;
int k;
while(getline(cin,输入))
{
/*将输入拆分为整数*/
向量v;
istringstream iss(输入);
而(iss>>k)v.向后推(k);
/*---二--*/
无符号长和=0;
无符号i,j;
对于(i=0;i1;i--)
{
如果(可以[我])
{
如果(i这个怎么工作

创建一个空的char向量,将一个值推入其中,并尝试分配传递给第一个值的值:

    ...
    vector<char> can;
    can.push_back(1);  // can contains one single value
    for (i = 1; i <= sum; i++)
        can[i] = 0;    // Error "vector subscript out of range" in debug mode
这怎么行

创建一个空的char向量,将一个值推入其中,并尝试分配传递给第一个值的值:

    ...
    vector<char> can;
    can.push_back(1);  // can contains one single value
    for (i = 1; i <= sum; i++)
        can[i] = 0;    // Error "vector subscript out of range" in debug mode

所以我必须把它从can[i]=0改为can.push_back(0)?还是我wrong@KristianKamenov:那会好得多。请参阅我的编辑。因此我必须将其从can[i]=0更改为can.push_back(0)?还是我wrong@KristianKamenov:那会更好。请参阅我的编辑。