zoukankan      html  css  js  c++  java
  • POJ 3666(dp

    题意:给出一个数列,求把它变成单调数列的最小成本,成本的定义是原始数列与结果数列每一项的差值的绝对值之和。

    首先应该观察到,这个花费的计算与数列的顺序无关,如果调换结果数列的元素顺序,花费不变。

    这样我们可以以数列的长度和最后一个数的大小作为递推下标,并且注意到结果数列中的数必然全部为原始数列中的数,所以可得如下dp。

    import java.util.*;
    import java.math.*;
    import java.io.*;
    public class Main {
        public static final int maxv=2000+40;
        public static void main(String[] args) throws Exception {
            Scanner in = new Scanner(new File("/home/develop/eclipse_file/ACMproject/src/in"));
            // Scanner in=new Scanner(System.in);
            int[][] dp=new int[maxv][maxv];
            int N;
            N=in.nextInt();
            int[] a=new int[N];
            int[] b=new int[N];
            for(int i=0;i<N;i++){
                a[i]=in.nextInt();
                b[i]=a[i];
            }
            Arrays.sort(b);
            for(int i=0;i<N;i++) dp[0][i]=Math.abs(a[0]-b[i]);
            for(int i=1;i<N;i++){
                int pre=dp[i-1][0];
                for(int j=0;j<N;j++){
                    pre=Math.min(pre, dp[i-1][j]);
                    dp[i][j]=Math.abs(a[i]-b[j])+pre;
                }
            }
            int ans=(int)1e9;
            for(int i=0;i<N;i++){
                ans=Math.min(ans, dp[N-1][i]);
            }
            System.out.println(ans);
            in.close();
        }
    }
    View Code
  • 相关阅读:
    LRU Algorithm Gym
    Running Routes Kattis
    Box HDU
    manjaro 安装 tim 后无法输入中文
    Angle Beats Gym
    Fish eating fruit 沈阳网络赛(树形dp)
    请求接口模板
    Droppable 拖拽实例
    线程处理
    网站的配置文件XML读写
  • 原文地址:https://www.cnblogs.com/Cw-trip/p/4582058.html
Copyright © 2011-2022 走看看