막대 절단 문제 (길이가 n 인 막대가 n> 0, n은 정수이고, 정수 길이의 조각으로 자르고 싶음) 총 가격이 최대화 되었음), p는 가격 목록, n은 막대의 길이입니다. 나는 최대 값을 얻기 위해 막대를 자르고 싶습니다. 그 동안 우리는 또한 길이가 unqiue인지 확인해야합니다. 즉, 이미 조각 길이 = 3, 다른 조각 길이 = 3을 절단 할 수없는 경우입니다.고유 길이 값으로 자른 막대의 최대 총 가격을 계산하십시오.
예를 들어 벡터 p = {1,5,8,9,10,12,17,20}; 최대 가격 : 21, 길이 : 2,3,3. 그래서 결과는 20이되어야하고 길이는 2,3,3 대신에 830이됩니다.
어떻게하면 코드를 수정하고 시간 복잡성을 유지할 수 있습니까? O (n^2) 감사.
int n = 8;
vector<int> p = {1,5,8,9,10,12,17,20};
void cut_rod(vector<int>& p, int n){
int r[n+1];
int s[n+1];
r[0] = 0;
for (int j = 1; j<=n; j++){
int q = INT_MIN;
for (int i = 1; i <= j; i++){
if(q < p[i-1] + r[j-i]){
q = p[i-1] + r[j-i];
s[j] = i;
}
}
r[j] = q;
}
return r[n];
}
같은 조각의 길이를받을 수 있나요? – stark