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