c++ 动态数组的开辟,动态规划,最大数

https://www.lintcode.com/problem/minimum-adjustment-cost/description

参考博客:https://blog.csdn.net/qq_34355232/article/details/78437943

 

描述

中文English

给一个整数数组,调整每个数的大小,使得相邻的两个数的差不大于一个给定的整数target,调整每个数的代价为调整前后的差的绝对值,求调整代价之和最小是多少。

 

你可以假设数组中每个整数都是正整数,且小于等于100

您在真实的面试中是否遇到过这个题?  是

题目纠错

样例

样例 1:
	输入:  [1,4,2,3], target=1
  输出:  2

样例 2:
	输入:  [3,5,4,7], target=2
	输出:  1

 

vector> arr(n+1,vector(101,numeric_limits::max()));//开辟二维数组,赋予最大值

arr[0]=vector(101,0);//其中的第一个数组赋值为0
class Solution {
public:
    /*
     * @param A: An integer array
     * @param target: An integer
     * @return: An integer
     */
    int MinAdjustmentCost(vector &A, int target) {
        // write your code here
        int n=A.size();
        vector> arr(n+1,vector(101,numeric_limits::max()));
        arr[0]=vector(101,0);
        for(int i=1;i<=n;i++){
            for(int j=0;j<101;j++){
                for(int k=0;k<101;k++){
                    if(abs(k-j)<=target){
                        arr[i][j]=min(arr[i-1][k]+abs(j-A[i-1]),arr[i][j]);
                    }
                }
            }
        }
        int res=numeric_limits::max();
        for(int i=0;i<101;i++){
            res=min(res,arr[n][i]);
        }
        return res;
    }
};

 

你可能感兴趣的:(算法)