n 個の要素 a1、a2 ... an の配列が与えられます。関数 C = max |a(i+1)-a(i)| を定義すると、i = 2 から n-1 の場合。したがって、配列の C の値を計算できます。ここで問題は、配列と C の値が与えられた場合、この C の値を取得するには、配列内のいくつの要素を変更する必要があるかということです。
これは、このコードフォースの問題に対する解決策の一部です: http://codeforces.com/contest/361/problem/D
動的計画法で解いていますが、答えがわかりません。誰か説明してくれませんか?これがコードです。
/* x is the value of the function
n the size of the array
*/
int Cal(LL x){
for(int i = 1; i <= n; i++)
dp[i] = 0;
for(int i = 1; i <= n; i++){
for(int j = i + 1; j <= n; j++){
if(abs(a[i] - a[j]) <= 1ll * (j - i) * x) {
dp[j] = max(dp[j], dp[i] + 1);
}
}
}
int ret = 0;
for(int i = 1; i <= n; i++)
ret = max(ret, dp[i] + 1);
return n - ret;
}