ロッドカットの問題(n> 0、nは長さnの棒があり、そのような整数の長さの部分にカットしたい総価格が最大になる)、pは価格のリスト、nは棒の長さです。私は棒を切って、最高の価格を得るために、その間に、長さがunqiueであることを保証する必要があります。つまり、すでに長さ= 3の長さをカットしていれば、長さ= 3一意の長さの値でカットされたロッドの最大合計価格を計算する
例えば、ベクトルp = {1,5,8,9,10,12,17,20}。私に最大の価格を与える:21と長さ:2,3,3。したがって、結果は20であり、長さは2,3,3の代わりに8,3
どのように私のコードを修正し、時間の複雑さを維持することができますか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