这个题目的朴素动态规划解法很容易想到
dp[i][j]=min(dp[i-1][k]+abs(j-k)*c+(j-a[i])^2)
说说怎么优化,因为每次决策的状态有很多是重复的,所以可以记录其中的最优值,每次跟新进来的状态比较及可。
这样决策的复杂度就变成O(1)了,所以复杂度为n*c。
#include
#include
#include
using namespace std;
const int maxn=1e5+9,inf=16843009,maxm=100;
int n,c;
int dp[maxn][101],a[maxn];
int main()
{
}