ÉèΪÊ×Ò³ ¼ÓÈëÊÕ²Ø

TOP

×î´óÖµ¼õÈ¥×îСֵµÄƽ·½ÊµÀý
2013-11-20 14:24:02 À´Ô´: ×÷Õß: ¡¾´ó ÖРС¡¿ ä¯ÀÀ:112´Î
Tags£º×î´óÖµ ¼õÈ¥ ×îС ƽ·½ ʵÀý
    ÌâÒ⣺¸øÄãn¸öÊý×Ö£¬È»ºó½ÐÄã´ÓÕâЩÊý×ÖÖÐÑ¡³öm¶Ñ£¬Ê¹µÃÿһ¶ÑµÄ×ܺÍ×îС£¬Ò»¶ÑµÄ×ܺ;ÍÊÇÕâÒ»¶ÑÖÐ×î´óÖµ¼õÈ¥×îСֵµÄƽ·½£¬×îºóҪʹµÃËùÓÐ¶Ñ¼ÓÆðÀ´µÄ×ܺÍ×îС¡£
    ˼·£º¶ÔÕâЩÊý×ÖÅÅÐòÖ®ºó£¬ºÜÈÝÒ×Ïëµ½DP½â·¨£¬ÓÃdp[i][j]±íʾÊý×ÖiÏÖÔÚÔÚµÚj¶Ñ£¬ÄÇÃ´×ªÒÆ·½³Ì¾ÍÊÇdp[i][j] = min£¨dp[i][j] , dp[k][j - 1] + £¨a[i] - a[k + 1]£© ^ 2£©¡£ÒòΪÒѾ­ÅÅÐò£¬ËùÒÔÕâÒ»¶ÑÖеÄ×î´ó×îСֵÆäʵ¾ÍÊÇa[i]ºÍa[k + 1].ËùÒÔÓÃDP¿É½â¡£
    µ«ÊÇ×¢Òâµ½Õâʵ¼ÊÉÏÊÇÐèÒª3ÖØÑ­»·µÄ£¬¶øÇÒNºÍM·Ö±ðΪ10 ^ 4ºÍ5 * 10 ^ 3,ËùÒÔ»áTLE.
    Æäʵ¿´µ½×ªÒÆ·½³ÌºóÃæµÄ²¿·Ö£¬ÎÒÃǾÍÓ¦¸ÃÄÜÏ뵽бÂÊÓÅ»¯µÄ·½·¨¡£
    ¼ÙÉèk < l < i,ÎÒÃÇҪʹµÃkµÄ¾ö²ßÓÅÓÚl,ÄÇôҲ¾ÍÊÇdp[k][j - 1] + £¨a[i] - a[k + 1]£© ^ 2 < dp[l][j - 1] + £¨a[i] - a[l + 1]£© ^ 2 .
    »¯¼òµÃ£¨dp[k][j - 1] + a[k + 1] ^ 2 - £¨dp[l][j - 1] + a[l + 1] ^ 2£©£© / £¨2 * £¨a[k + 1 ] - a[l + 1]£©£© < a[i] .
    Ò²¾ÍÊÇ˵·ûºÏÉÏÊöбÂÊÒªÇóµÄk,ÊÇÓÅÓÚlµÄ¡£
    ÎÒÃÇÓÃg£¨k ,l £©±íʾkµÄ¾ö²ßÓÅÓÚl.
    ÄÇôÎÒÃÇÿ´Î¸üРdp[i][j]µÄÖµµÄʱºò£¬Ö»ÐèҪȡ³ö×îÓŵľö²ß¼´¿É£¬ËùÒÔÕâһά¾ÍÊÇO£¨1£© .
    ½øÒ»²½Ëµ£¬ÔÚµÚÒ»¸öwhile ÖУ¬Èç¹ûÕâʱºò¶ÓÁÐÀïÓÐÁ½¸öÔªËØ£¬qe[l + 1] ºÍqe[l].Èç¹ûÕâʱºòg£¨qe[l + 1] , qe[l]£©³ÉÁ¢£¬ÄÇôÕâʱºòqe[l]¾Í²»ÐèÒªÔÙ¼ÆËãÁË£¬ÒòΪqe[l + 1]µÄ¾ö²ß±ÈËû¸üÓÅ£¬ËùÒÔÎÒÃÇÖ»ÐèÒªÕÒ³ö×îÓŵľö²ß£¬¸üÐÂÒ»´Î¼´¿É¡£
    ͬÑùµÄ£¬¼ÙÉèk < l < i .Èç¹ûg£¨i , l £© < g£¨l , k£©£¬ÄÇô´ËʱlÊÇ¿ÉÒÔ±»ÓÅ»¯µôµÄ¡£ÒòΪËû²»¿ÉÄÜÊÇ×îÓŽ⡣Õâ¾ÍÊǵڶþ¸öwhileµÄ×÷Óá£
    #include <set>
    #include <map>
    #include <stack>
    #include <cmath>
    #include <queue>
    #include <cstdio>
    #include <string>
    #include <vector>
    #include <iomanip>
    #include <cstring>
    #include <iostream>
    #include <algorithm>
    #define Max 2505
    #define FI first
    #define SE second
    #define ll long long
    #define PI acos£¨-1.0£©
    #define inf 0x3fffffff
    #define LL£¨x£© £¨ x ¡¶ 1 £©
    #define bug puts£¨"here"£©
    #define PII pair<int,int>
    #define RR£¨x£© £¨ x ¡¶ 1 | 1 £©
    #define mp£¨a,b£© make_pair£¨a,b£©
    #define mem£¨a,b£© memset£¨a,b,sizeof£¨a£©£©
    #define REP£¨i,s,t£© for£¨ int i = £¨ s £© ; i <= £¨ t £© ; ++ i £©
    using namespace std;
    #define N 11111
    #define M 5555
    int dp[N][M] ;
    int a[N] ;
    int getU£¨int j ,int k ,int z£©{
    return dp[k][j - 1] + a[k + 1] * a[k + 1] - £¨dp[z][j - 1] + a[z + 1] * a[z + 1]£© ;
    }
    int getD£¨int k , int z£©{
    return 2 * £¨a[k + 1] - a[z + 1]£© ;
    }
    int getDP£¨int i , int j ,int k£©{
    return dp[k][j - 1] + £¨a[i] - a[k + 1]£© * £¨a[i] - a[k + 1]£© ;
    }
    int qe[N * 10] ;
    void solve£¨£©{
    int n , m ;
    cin ¡· n ¡· m ;
    for £¨int i = 1 ; i <= n ; i ++ £©cin ¡· a[i] ;
    sort£¨a + 1 , a + n + 1 £© ;
    for £¨int i = 0 ; i <= n ; i ++ £©{
    for £¨int j = 0 ; j <= m ; j ++ £©
    dp[i][j] = inf ;
    dp[i] = £¨a[i] - a £© * £¨a[i] - a £© ;
    }
    dp[0][0] = 0 ;
    for £¨int j = 1 ; j <= m ; j ++ £©{
    int l = 0 , r = 0 ;
    qe[r ++ ] = 0 ;
    for £¨int i = 1 ; i <= n ; i ++ £©{
    while£¨l + 1 < r && getU£¨j , qe[l + 1] , qe[l]£© <= a[i] * getD£¨qe[l + 1] ,qe[l]£©£©l ++ ;
    dp[i][j] = getDP£¨i , j , qe[l]£© ;
    while£¨l + 1 < r && getU£¨j , i , qe[r - 1]£© * getD£¨qe[r - 1] , qe[r - 2]£© <=
    getU£¨j , qe[r - 1] , qe[r - 2]£© * getD£¨i , qe[r - 1]£©£©r -- ;
    qe[r ++ ] = i ;
    }
    }
    cout ¡¶ dp[n][m] ¡¶ endl;
    }
    int main£¨£© {
    int ca = 0 ;
    int t ; cin ¡· t ; while£¨t -- £©{
    printf£¨"Case %d: ",++ca£© ;
    solve£¨£© ;
    }
    return 0 ;
    }

¡¾´ó ÖРС¡¿¡¾´òÓ¡¡¿ ¡¾·±Ìå¡¿¡¾Í¶¸å¡¿¡¾Êղء¿ ¡¾ÍƼö¡¿¡¾¾Ù±¨¡¿¡¾ÆÀÂÛ¡¿ ¡¾¹Ø±Õ¡¿ ¡¾·µ»Ø¶¥²¿¡¿
·ÖÏíµ½: 
ÉÏһƪ£º´ÓÒ»¶Ñ¶þάµãÖÐÕÒµ½×î¸ß·Ö ÏÂһƪ£ºÉñÆæµÄ¾âÊ÷бÂÊÓÅ»¯ÊµÀý

ÆÀÂÛ

ÕÊ¡¡¡¡ºÅ: ÃÜÂë: (ÐÂÓû§×¢²á)
Ñé Ö¤ Âë:
±í¡¡¡¡Çé:
ÄÚ¡¡¡¡ÈÝ:

¡¤Linuxϵͳ¼ò½é (2025-12-25 21:55:25)
¡¤Linux°²×°MySQL¹ý³Ì (2025-12-25 21:55:22)
¡¤Linuxϵͳ°²×°½Ì³Ì£¨ (2025-12-25 21:55:20)
¡¤HTTP Åc HTTPS µÄ²î„ (2025-12-25 21:19:45)
¡¤ÍøÕ¾°²È«±ØÐ޿ΣºÍ¼ (2025-12-25 21:19:42)