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

TOP

ÉñÆæµÄ¾âÊ÷бÂÊÓÅ»¯ÊµÀý
2013-11-20 14:23:58 À´Ô´: ×÷Õß: ¡¾´ó ÖРС¡¿ ä¯ÀÀ:117´Î
Tags£ºÉñÆæ ÓÅ»¯ ʵÀý
    ÌâÒ⣺¸ø³öÁ½¸öÊý×飬·Ö±ð±íʾÊ÷µÄ¸ß¶ÈºÍÊ÷µÄ²¹³äÄÜÁ¿µÄÖµ¡£ÓÐÁ½¸öÈËÔÚ¾âÊ÷£¬ÕâÁ½¸öÈ˵ľâ×ÓºÜÉñÆæ£¬Ò»´ÎÖ»ÄܾâÒ»¿ÅÊ÷µÄ¸ß¶È1,Ò²¾ÍÊÇÒ»´ÎÒ»¿ÅÊ÷Ö»¼õ1.È»ºóÿ´Î¾â×Ó¾âÍêÒ»´Î¾ÍÒª²¹³äÒ»ÏÂÄÜÁ¿£¬Õâ¸ö²¹³äµÄÄÜÁ¿Ã¿´Î¾ÍÊÇÕÒµ½±»¾âÍêµÄID×î´óµÄÊ÷£¬È»ºó²¹³äÕâ¸öÊ÷µÄÄÜÁ¿Öµ¡£×îºó¾ÍÊÇÎÊ£¬×îÉÙÐèÒª»¨·Ñ¶àÉÙµÄÄÜÁ¿£¬²ÅÄÜʹµÃËùÓеÄÊ÷¶¼±»¾âÍê¡£
    ·ÖÎö£ºÏÔÈ»ÊǸöDP.¿¼Âǵ½N = 10 ^ 5,ÄÇô¶þÖØDP¿Ï¶¨ÊDz»¿ÉÒԵġ£ÎÒÃǼÙÉèdp[i]ÊǵÚi¿ÃÊ÷±»¾âÍêµÄ×Ü»¨·Ñ£¬ÄÇôdp[i] = min£¨dp[i] , dp[j] + a[i] * b[j]£©¡£
    ÕâÀïiÐèÒªÒ»ÖØÑ­»·£¬jÐèÒªÒ»ÖØÑ­»·£¬ËùÒԿ϶¨TLE.
    ¿¼Âǵ½ºóÃæµÄϵÊý£¬ÎÒÃÇÏÔÈ»¿ÉÒÔʹÓÃбÂÊÓÅ»¯À´ÓÅ»¯Õâ¸öÎÊÌâ¡£
    dp[j] + a[i] * b[j] < dp[k] + a[i] * b[k]. => £¨dp[j] - dp[k]£© / £¨b[k] - b[j]£© < a[i] .
    ËùÒÔбÂʾͳöÀ´ÁË¡£¾Í¿ÉÒÔÓÅ»¯ÁË¡£
    ÕâÌâÐèҪעÒâһϵľÍÊÇ£¬ÒÔǰÎÒдбÂÊÓÅ»¯Ò»°ã¶¼ÊÇÒ»¸ö·Ö×Ó£¬Ò»¸ö·Öĸ£¬È»ºóÓÅ»¯µÄʱºòÁ½±ßÏà³ËÅжϡ£
    µ«ÊÇÕâÌâÐèҪעÒâµÄ¾ÍÊÇ£¬µ±Ïà³ËµÄʱºò£¬ÊÇÓпÉÄܱ¬long long µÄ
    ËùÒÔ¸ÄÓÃdouble¾Í¹ýÁË£¬ÕâºÍƽʱµÄд·¨Óйأ¬µ±È»Ò²ÐèÒª¸ü¼ÓϸÐÄ¡£
    #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 unsigned __int64
    #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 1111111
    ll a[N] ;
    ll b[N] ;
    ll dp[N] ;
    int qe[N] ;
    ll getU£¨int j ,int k£©{//·Ö×Ó
    return dp[j] - dp[k] ;
    }
    ll getD£¨int j ,int k£©{//·Öĸ
    return b[k] - b[j] ;
    }
    double fk£¨int j ,int k£©{
    return £¨double£©£¨dp[j] - dp[k]£© / £¨b[k] - b[j]£© ;
    }
    ll getDP£¨int i ,int j£©{
    return dp[j] + b[j] * a[i] ;
    }
    int main£¨£© {
    int n ;
    cin ¡· n ;
    for £¨int i = 1 ; i <= n ; i ++ £©cin ¡· a[i] ;
    for £¨int i = 1 ; i <= n ; i ++ £©cin ¡· b[i] ;
    mem£¨dp , -1£© ;
    int l = 0 , r = 0 ;
    qe[r ++ ] = 1 ;
    //    dp[0] = 0 ;
    dp = 0 ;
    for £¨int i = 2 ; i <= n ; i ++ £©{
    while£¨l + 1 < r && fk£¨qe[l + 1] , qe[l]£© <= a[i]£© l ++ ;
    dp[i] = getDP£¨i , qe[l]£© ;
    //ÕâÀïÁ½Ê½Ïà³ËÊDZ¬long long µÄ¡£×¢Òâһϡ£
    //        while£¨l + 1 < r && getU£¨i , qe[r - 1]£© * getD£¨qe[r - 1] ,qe[r - 2]£© <=
    //                getU£¨qe[r - 1] , qe[r - 2]£© * getD£¨i , qe[r - 1]£©£© r -- ;
    while£¨l + 1 < r && fk£¨i , qe[r - 1]£© <= fk£¨qe[r - 1] , qe[r - 2]£©£© r -- ;
    qe[r ++ ] = i ;
    }
    cout ¡¶ dp[n] ¡¶ endl ;
    return 0 ;
    }

¡¾´ó ÖРС¡¿¡¾´òÓ¡¡¿ ¡¾·±Ìå¡¿¡¾Í¶¸å¡¿¡¾Êղء¿ ¡¾ÍƼö¡¿¡¾¾Ù±¨¡¿¡¾ÆÀÂÛ¡¿ ¡¾¹Ø±Õ¡¿ ¡¾·µ»Ø¶¥²¿¡¿
·ÖÏíµ½: 
ÉÏһƪ£º×î´óÖµ¼õÈ¥×îСֵµÄƽ·½ÊµÀý ÏÂһƪ£ºPOJ 3974 ×»ØÎÄ×Ö´®

ÆÀÂÛ

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

¡¤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)