zoukankan      html  css  js  c++  java
  • [POJ 3666] Making the Grade

    [题目链接]

             http://poj.org/problem?id=3666

    [算法]

           离散化 + dp

    [代码] 

              

    #include <algorithm>  
    #include <bitset>  
    #include <cctype>  
    #include <cerrno>  
    #include <clocale>  
    #include <cmath>  
    #include <complex>  
    #include <cstdio>  
    #include <cstdlib>  
    #include <cstring>  
    #include <ctime>  
    #include <deque>  
    #include <exception>  
    #include <fstream>  
    #include <functional>  
    #include <limits>  
    #include <list>  
    #include <map>  
    #include <iomanip>  
    #include <ios>  
    #include <iosfwd>  
    #include <iostream>  
    #include <istream>  
    #include <ostream>  
    #include <queue>  
    #include <set>  
    #include <sstream>  
    #include <stdexcept>  
    #include <streambuf>  
    #include <string>  
    #include <utility>  
    #include <vector>  
    #include <cwchar>  
    #include <cwctype>  
    #include <stack>  
    #include <limits.h> 
    using namespace std;
    #define MAXN 2010
    typedef long long ll;
    const ll INF = 1e15;
    
    int i,n,len;
    ll a[MAXN],tmp[MAXN];
    ll ans;
    ll dp[MAXN][MAXN];
    
    ll myabs(ll x)
    {
        return x < 0 ? -x : x;
    }
    inline ll dp1()
    {
        int i,j;
        ll mn = INF,ret = INF;
        for (i = 1; i <= n; i++)
        {
            for (j = 1; j <= len; j++)
            {
                dp[i][j] = INF;
            }
        }
        for (i = 1; i <= len; i++) dp[1][i] = myabs(a[1] - tmp[i]);
        for (i = 2; i <= n; i++)
        {
            mn = INF;
            for (j = 1; j <= len; j++)
            {
                mn = min(mn,dp[i-1][j]);
                dp[i][j] = mn + myabs(a[i] - tmp[j]);
            }    
        }
        for (i = 1; i <= len; i++) ret = min(ret,dp[n][i]);
        return ret;
    }
    inline ll dp2()
    {
        int i,j;
        ll mn = INF,ret = INF;
        for (i = 1; i <= n; i++)
        {
            for (j = 1; j <= len; j++)
            {
                dp[i][j] = INF;
            }
        }    
        for (i = 1; i <= len; i++) dp[1][i] = myabs(a[1] - tmp[i]);
        for (i = 2; i <= n; i++)
        {
            mn = INF;
            for (j = len; j >= 1; j--)
            {
                mn = min(mn,dp[i-1][j]);
                dp[i][j] = mn + myabs(a[i] - tmp[j]);
            }
        }
        for (i = 1; i <= len; i++) ret = min(ret,dp[n][i]);
        return ret;
    }
    
    int main()
    {
        
        scanf("%d",&n);
        for (i = 1; i <= n; i++) 
        {
            scanf("%lld",&a[i]);
            tmp[i] = a[i];
        }
        sort(tmp+1,tmp+n+1);
        len = unique(tmp+1,tmp+n+1) - tmp - 1;
        ans = min(dp1(),dp2());
        printf("%lld
    ",ans);
    
        return 0;
    }
  • 相关阅读:
    Android改app名称
    DNSLog注入笔记
    mac burp suite https证书安装
    python-requests-proxies判断学习
    mac java jdk 安装删除
    php简单一句话分析
    mysql盲注学习-1
    Python实现访问者模式
    Python operator模块和functools模块
    SQL 日期函数转换
  • 原文地址:https://www.cnblogs.com/evenbao/p/9324790.html
Copyright © 2011-2022 走看看