[英]How to erase an element in a vector of vector or matrix
嘿,我正在嘗試擦除向量向量/很可能是由向量組成的矩陣中的一個元素,所以我搜索了堆棧溢出,但它沒有任何答案,我也無法在網上找到它,所以我想在這里問。好吧,我是編程新手,我正在嘗試解決 google kick start 2020 Round-A QUESTION 。
所以我寫了一個代碼,它的作用類似於堆棧,我沒有使用堆棧,但嘗試使用向量實現它,但無法擦除第 i 個向量 n'th position 中的元素。
代碼
#include <iostream>
#include <vector>
#include <algorithm>
#define ans(x,y) "Case #"<<x<<": "<<y<<"\n"
using namespace std;
int main(int argc, char *argv[])
{
#ifndef ONLINE_JUDGE
freopen("input.txt","r",stdin);
freopen("output.txt","w",stdout);
#endif
int TC;
cin>>TC;
int k=1;
while(TC--){
int Stacks,Plates,Max;
cin>>Stacks>>Plates>>Max;
vector<vector<int>>S_Plates;
for(int i=0;i<Stacks;i++){
vector<int>vec;
for(int j=0;j<Plates;j++){
int Dat;
cin>>Dat;
vec.push_back(Dat);
}
S_Plates.push_back(vec);
}
int Cnt=0,Beauty=0;
while(Cnt!=Plates){
int mx=0;
int SNo=0;
for(int i=0;i<Stacks;i++){
mx=(mx,S_Plates[i][0]);
if(mx==S_Plates[i][0])
SNo=i;
}
Beauty+=(mx);
// Well Got Stucked Here S_Plates.erase(S_Plates.begin()+SNo[0]);
Cnt++;
}
cout<<ans(k,Beauty);
k++;
}
}
好吧,為了理解代碼,請參考我上面鏈接的問題。
所以請讓我知道我該怎么做。
PS:抱歉英語不好和代碼不好
擦除可以如下執行:
S_Plates[SNo].erase(S_Plates[SNo].begin());
如評論中所示,其他地方需要進行一些修改。
請注意,擦除是一個昂貴的 function,在這里沒用:您可以使用索引。 (每堆一個)
然而,這種貪心算法並沒有提供好的結果。 例如,考慮
Stacks (N) = 3; Plates (K) = 2; Max (P) = 2;
S[0] = {1, 100}, S[1]={2, 2}, S[2] = {2, 2}
您的程序返回 4 而不是 101。
解決方案是實現一個DP算法。
讓我們定義一個初始化為 0 的數組Cumul[N][P]
。
然后
i = 0 to N-2
Cumul[i+1][j] = max (Cumul[i][j], Cumul[i][j-k], A[i][0] + .. A[i][k-1]), for j =0 to P and k = 0 to K
復雜度為 O(PNK)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.