• <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 閱讀(826) 評論(1)  編輯 收藏 引用 所屬分類: 動態規劃
            Comments
             
            久久久久久九九99精品| 亚洲一区精品伊人久久伊人 | 亚洲va久久久噜噜噜久久| 波多野结衣AV无码久久一区| 国产精品美女久久久| 久久久精品久久久久特色影视| 久久久精品国产| 99久久99久久精品国产片| 日韩AV毛片精品久久久| 91精品国产高清91久久久久久| 久久精品国产亚洲5555| 久久精品国产精品青草| 婷婷伊人久久大香线蕉AV| 久久久久久亚洲精品不卡 | 蜜臀久久99精品久久久久久| 国产精品一区二区久久不卡| 日韩精品久久久久久久电影| 91久久精品视频| 久久99国产亚洲高清观看首页| 久久中文字幕人妻熟av女| 久久99精品久久久久久噜噜| 久久精品一区二区| 国产精品久久久久jk制服| 亚洲国产精品一区二区久久hs| 久久天天躁狠狠躁夜夜不卡| 久久久无码精品午夜| 国产精品成人精品久久久| 久久96国产精品久久久| 久久精品男人影院| 伊人色综合久久| 99久久综合国产精品二区| 亚洲国产成人久久综合一| 99热成人精品热久久669| 久久久久亚洲av无码专区喷水 | 久久w5ww成w人免费| 久久青青草原亚洲av无码app| 99久久精品免费看国产一区二区三区| 无码8090精品久久一区| 99久久做夜夜爱天天做精品| 伊人色综合九久久天天蜜桃| 亚洲综合久久久|