• <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ù)才過(guò)的。而且代碼寫的不好。將就看一下吧。

            /*************************************************************************
            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 閱讀(822) 評(píng)論(1)  編輯 收藏 引用 所屬分類: 動(dòng)態(tài)規(guī)劃
            Comments
             
            91视频国产91久久久| 国产精品永久久久久久久久久 | 久久综合九色综合久99| 国内精品伊人久久久久影院对白| 久久久久久国产精品美女| 亚洲国产精品成人久久蜜臀| 久久久一本精品99久久精品66| 99国内精品久久久久久久| 久久天天躁夜夜躁狠狠躁2022 | 久久久久国产一区二区三区| 久久精品国产AV一区二区三区| 久久噜噜电影你懂的| 亚洲国产精品无码久久久久久曰| 高清免费久久午夜精品| 一个色综合久久| 精品视频久久久久| 精品久久久久久无码专区不卡| 久久男人AV资源网站| 国产精品毛片久久久久久久| 亚洲精品NV久久久久久久久久 | 久久精品国产亚洲av麻豆色欲| 亚洲国产精品久久| 久久精品国产久精国产| 久久久久亚洲av无码专区| 日本五月天婷久久网站| 亚洲Av无码国产情品久久| 久久国产乱子伦精品免费午夜| 国产麻豆精品久久一二三| 久久无码人妻一区二区三区午夜| 久久国产AVJUST麻豆| 久久精品国产99国产精品亚洲| 一日本道伊人久久综合影| 欧美激情精品久久久久久久| 国产午夜精品久久久久九九电影| 婷婷综合久久中文字幕| 激情五月综合综合久久69| 久久久WWW成人免费精品| 欧美午夜A∨大片久久 | 久久天堂AV综合合色蜜桃网| 久久久久久无码Av成人影院| 精品久久久久久成人AV|