给定一个由n个元素a1,a2 ... an组成的数组。如果我们定义一个函数C = max |a(i+1)-a(i)|对于i = 2到n-1。
因此我们可以计算出我们数组的C值。现在问题是,如果我们知道了数组和某个C值,那么我们需要改变多少个数组元素才能得到这个C值?
这是解决Codeforces问题的一部分: http://codeforces.com/contest/361/problem/D 它使用动态规划来解决,但我不理解答案。有人能向我解释一下吗?以下是代码。
这是解决Codeforces问题的一部分: 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;
}
if(abs(a[i] - a[j]) <= 1ll * (j - i) * x) {
中,1ll
是什么意思? - artur grzesiak