我正在制作一个算法来解决来自URI Online Judge的问题1310,并且在某些时候我需要以简单的方式从数组中删除一个项目,所以我声明了一个向量,但是,除了没有任何问题,我的代码没有打印任何东西,cout根本不起作用。
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int Lucro(int c, int n, vector<int> r){
if (n == 0){
return 0;
}else if (n == 1){
return max(r[0] - c, 0);
}
int q;
q = 0;
for (int k = 0; k < n; k++){
r.erase(r.begin() + k);
q = max(q, r[k] - c + Lucro(c, n-1, r));
}
return q;
}
int main()
{
int C, N, items;
cin >> N >> C;
vector<int> R;
for (int i = 0; i < N; i++){
cin >> items;
R.push_back (items);
}
cout << Lucro(C, N, R) << endl;
cout << 'test' << endl;
}
由于我在c ++中使用向量很新,有人可以向我解释发生了什么以及如何解决它?
答案 0 :(得分:1)
很可能你的程序崩溃了,因为你通过删除元素而不是递减大小n
来超出你的矢量范围:
for (int k = 0; k < n; k++){
r.erase(r.begin() + k); //decrement n after this
q = max(q, r[k] - c + Lucro(c, n-1, r));
}
在任何情况下,你根本不应该有n
变量,你应该使用r.size()
来获得当前的向量大小。