• <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)


            有很多細節不好考慮,應該是我的水平原因。最后我向updog要了數據才過的。而且代碼寫的不好。將就看一下吧。

            /*************************************************************************
            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 閱讀(823) 評論(1)  編輯 收藏 引用 所屬分類: 動態規劃
            Comments
             
            亚洲∧v久久久无码精品| 国产99久久精品一区二区| 久久国产免费直播| 亚洲人成无码久久电影网站| 免费无码国产欧美久久18| 久久精品中文字幕无码绿巨人 | 97久久精品国产精品青草| 久久精品9988| 久久无码高潮喷水| 18岁日韩内射颜射午夜久久成人| 国产精品久久久久久福利69堂| 久久精品免费一区二区三区| 欧美伊人久久大香线蕉综合| 激情伊人五月天久久综合| 一本大道久久东京热无码AV| 久久99精品国产麻豆宅宅| 国产精品亚洲综合久久| 久久综合九色综合97_久久久| 精品国产青草久久久久福利| 欧美午夜精品久久久久免费视 | 久久久久久久久久免免费精品| 亚洲午夜无码AV毛片久久| 色偷偷888欧美精品久久久| 国内高清久久久久久| 久久久久97国产精华液好用吗| 亚洲欧美伊人久久综合一区二区 | 97久久婷婷五月综合色d啪蜜芽| 国内精品久久久久久久97牛牛| 久久久久无码中| 久久精品二区| 久久久无码精品亚洲日韩软件| 亚洲狠狠婷婷综合久久蜜芽| 女人高潮久久久叫人喷水| 性做久久久久久久久| 久久无码一区二区三区少妇| 99久久精品国产一区二区三区 | 久久久久国产亚洲AV麻豆| 国产福利电影一区二区三区久久老子无码午夜伦不 | 尹人香蕉久久99天天拍| 久久播电影网| 亚洲人成无码网站久久99热国产|