• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            A O(NM) dynamic programming algorithm is quite apparent after sorting the computers and network interfaces by their coordinates. Furthermore, in any optimized case, for each computer the difference between the the indices of the network interfaces matching to and closest to the computer is never larger than N. So the complexity could be reduced to O(N2)


            有很多細(xì)節(jié)不好考慮,應(yīng)該是我的水平原因。最后我向updog要了數(shù)據(jù)才過的。而且代碼寫的不好。將就看一下吧。

            /*************************************************************************
            Author: WHU_GCC
            Created Time: 2000-9-10 14:03:51
            File Name: pku3375.cpp
            Description: 
            ***********************************************************************
            */

            #include 
            <iostream>
            using namespace std;

            #define out(x) (cout << #x << ": " << x << endl)
            typedef 
            long long int64;
            const int maxint = 0x7FFFFFFF;
            const int64 maxint64 = 0x7FFFFFFFFFFFFFFFLL;
            template 
            <class T> void show(T a, int n) for (int i = 0; i < n; ++i) cout << a[i] << ' '; cout << endl; }
            template 
            <class T> void show(T a, int r, int l) for (int i = 0; i < r; ++i) show(a[i], l); cout << endl; }

            const int maxm = 100010;

            int n, m;
            int interface[maxm];
            int computer[maxm];
            int f[2][maxm];
            int last[2];

            int main()
            {
                
            while (scanf("%d%d"&m, &n) != EOF)
                
            {
                    
            for (int i = 1; i <= m; i++)
                        scanf(
            "%d"&interface[i]);
                    
            for (int i = 1; i <= n; i++)
                        scanf(
            "%d"&computer[i]);
                    
                    sort(
            interface + 1interface + 1 + m);
                    sort(computer 
            + 1, computer + 1 + n);

                    
            for (int i = 0; i <= m; i++)
                        f[
            1][i] = maxint;

                    
            for (int i = 0; i <= m; i++)
                        f[
            0][i] = 0;

                    last[
            0= 0;

                    
            for (int i = 1; i <= n; i++)
                    
            {
                        
            int l = 1;
                        
            int r = m;
                        
            while (l + 1 < r)
                        
            {
                            
            int mid = (l + r) / 2;
                            
            if (interface[mid] >= computer[i])
                                r 
            = mid;
                            
            else
                                l 
            = mid;
                        }

                        
            int st = max(l - n - 11);
                        
            int ed = min(l + n + 1, m);
                        
            int now = i % 2;
                        
            int prev = (i + 1% 2;
                        last[now] 
            = ed;
                        
            for (int j = st; j <= ed; j++)
                        
            {
                            
            if (f[prev][j - 1!= maxint)
                                f[now][j] 
            <?= f[prev][j - 1+ abs(computer[i] - interface[j]);
                            
            else if (last[prev] < j - 1)
                                f[now][j] 
            <?= f[prev][last[prev]] + abs(computer[i] - interface[j]);
                            f[now][j] 
            <?= f[now][j - 1];
                        }

                        
            for (int j = 0; j <= m; j++)
                            f[prev][j] 
            = maxint;
                    }

                    
            int ans = maxint;
                    
            for (int i = 0; i <= m; i++)
                        ans 
            <?= f[n % 2][i];

                    printf(
            "%d\n", ans);
                }

                
            return 0;
            }
            posted on 2007-09-11 22:28 Felicia 閱讀(812) 評論(1)  編輯 收藏 引用 所屬分類: 動態(tài)規(guī)劃
            Comments
             
            久久99亚洲综合精品首页| 久久久久一区二区三区| 国产成人久久777777| 国产国产成人精品久久| 无码超乳爆乳中文字幕久久| 久久99热这里只有精品国产| 久久综合偷偷噜噜噜色| 波多野结衣久久一区二区| 久久乐国产精品亚洲综合| 久久综合久久鬼色| 精品久久久无码人妻中文字幕| 无码任你躁久久久久久| 久久人妻AV中文字幕| 久久天天躁狠狠躁夜夜avapp| 久久久亚洲欧洲日产国码aⅴ| 激情伊人五月天久久综合| 久久精品国产一区| 久久国产综合精品五月天| 日韩十八禁一区二区久久| 亚洲午夜久久久久久久久电影网| 亚洲精品无码久久久久sm| 国产精品久久影院| 午夜肉伦伦影院久久精品免费看国产一区二区三区 | 亚洲AV成人无码久久精品老人| 香蕉久久av一区二区三区| 久久综合丁香激情久久| 久久久久亚洲爆乳少妇无| 亚洲精品无码久久久久| 国产精品日韩欧美久久综合| 久久久久国产精品人妻| 国产成人久久久精品二区三区| 中文字幕精品无码久久久久久3D日动漫 | 色综合久久久久综合体桃花网| 99久久久国产精品免费无卡顿| 国产69精品久久久久99| 久久成人国产精品免费软件| 伊人色综合久久天天| 蜜臀av性久久久久蜜臀aⅴ麻豆| 伊人色综合久久| 激情伊人五月天久久综合| 午夜视频久久久久一区|