zoukankan      html  css  js  c++  java
  • 【CF713C】Sonya and Problem Wihtout a Legend(离散化,DP)

    题意:++ 
     

    思路:很久以前做过一道一模一样的

            严格递增很难处理,就转化为非严格递增处理

            设a[i]<a[j],i<j

               a[j]-a[i]>=j-i 

               a[j]-j>=a[i]-i

            即将a[i]转化为a[i]-i处理

            非严格递增情况下最终数列一定是由原先的数组成的,不可能出现某两个原数中间的值

            dp[i,j]为第i位,结尾为第j大的数,转化成这样的数列的最小费用

            dp[i,j]=min(dp[i-1,k]+abs(a[i]-b[j])) k<=j

            第一项用前缀和优化

     1 const oo=10000000000000;
     2 var dp,f:array[0..3000,0..3000]of int64;
     3     a,b:array[1..3000]of longint;
     4     n,i,j:longint;
     5     ans:int64;
     6 
     7 function min(x,y:int64):int64;
     8 begin
     9  if x<y then exit(x);
    10  exit(y);
    11 end;
    12 
    13 procedure qsort(l,r:longint);
    14 var i,j,t,mid:longint;
    15 begin
    16  i:=l; j:=r; mid:=b[(l+r)>>1];
    17  repeat
    18   while mid>b[i] do inc(i);
    19   while mid<b[j] do dec(j);
    20   if i<=j then
    21   begin
    22    t:=b[i]; b[i]:=b[j]; b[j]:=t;
    23    inc(i); dec(j);
    24   end;
    25  until i>j;
    26  if l<j then qsort(l,j);
    27  if i<r then qsort(i,r);
    28 end;
    29 
    30 begin
    31  //assign(input,'1.in'); reset(input);
    32 // assign(output,'1.out'); rewrite(output);
    33  readln(n);
    34  for i:=1 to n do
    35  begin
    36   read(a[i]);
    37   a[i]:=a[i]-i;
    38  end;
    39  b:=a;
    40  qsort(1,n);
    41  for i:=1 to n do
    42  begin
    43   for j:=0 to n do f[i,j]:=oo;
    44   for j:=1 to n do
    45   begin
    46    dp[i,j]:=abs(a[i]-b[j])+f[i-1,j];
    47    f[i,j]:=min(f[i,j-1],dp[i,j]);
    48   end;
    49  end;
    50  ans:=oo;
    51  for i:=1 to n do ans:=min(ans,dp[n,i]);
    52  writeln(ans);
    53  //close(input);
    54 // close(output);
    55 end.

             

  • 相关阅读:
    小酌一下:pipenv 基本用法
    sql2008使用您对无法重新创建的表进行了更改或者启用了“阻止保存重新创建表的更改”
    Join操作基本:外连接、自然连接、内连接
    用dataReader获取datetime类型完整精度的时间字串
    c# MesageBox
    判断当前时间是否在一个时间段内
    c# 根据当前时间获取,本周,本月,本季度,月初,月末,各个时间段
    sql Convert函数
    c# MD5方法总结
    wml跳转
  • 原文地址:https://www.cnblogs.com/myx12345/p/6023103.html
Copyright © 2011-2022 走看看