首页 > 代码库 > Codeforces 13C Sequence dp
Codeforces 13C Sequence dp
题目链接:http://codeforces.com/problemset/problem/13/C
题意:
给定n长的序列
每次操作能够给每一个数++或--
问最少须要几步操作使得序列变为非递减序列
#include<stdio.h> #include<iostream> #include<string.h> #include<set> #include<vector> #include<map> #include<math.h> #include<queue> #include<string> #include<stdlib.h> #include<algorithm> using namespace std; #define N 5005 #define ll __int64 inline ll Abs(ll x){return x>0?x:-x;} ll n; ll a[N],b[N], dp[N];//dp[j]为[1-j]为定点的把前i个数变成x序列的花费 int main(){ ll i, j; while(cin>>n){ for(i=1;i<=n;i++)scanf("%I64d",&a[i]), b[i] = a[i]; sort(b+1,b+1+n); memset(dp, 0, sizeof dp); for(i=1;i<=n;i++) { for(j=1;j<=n;j++) { dp[j]+=Abs(a[i]-b[j]); if(j>1) dp[j] = min(dp[j-1], dp[j]); } } cout<<dp[n]<<endl; } return 0; }
Codeforces 13C Sequence dp
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。