• <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
             
            精品多毛少妇人妻AV免费久久| 理论片午午伦夜理片久久| 久久久久久久免费视频| 亚洲精品蜜桃久久久久久| 久久国产免费观看精品3| 国产高清美女一级a毛片久久w| 青青草国产97免久久费观看| 人妻无码αv中文字幕久久琪琪布| 国产成人久久精品一区二区三区| 久久精品国产精品亚洲人人| 中文无码久久精品| 精品国产青草久久久久福利| 久久精品亚洲一区二区三区浴池| 国内精品久久久久久久亚洲| 久久久免费精品re6| 久久综合色区| 91精品国产91热久久久久福利| 狠狠色丁香久久婷婷综合| 国产成人久久久精品二区三区| 亚洲精品乱码久久久久久按摩| 久久人人爽人人爽人人片AV东京热| 久久久无码精品亚洲日韩按摩 | 日日狠狠久久偷偷色综合96蜜桃| 久久久亚洲欧洲日产国码是AV| 国产女人aaa级久久久级| 久久无码人妻一区二区三区| 人妻系列无码专区久久五月天| 久久综合综合久久97色| 国产91色综合久久免费| 亚洲国产精品无码成人片久久| 日韩精品久久久久久久电影| 久久久久久一区国产精品| 国产真实乱对白精彩久久| 曰曰摸天天摸人人看久久久| 国产精品18久久久久久vr | 久久91精品久久91综合| 国产91色综合久久免费分享| 精品久久久久香蕉网| 热久久这里只有精品| 久久精品成人免费国产片小草| 亚洲综合精品香蕉久久网97|