• <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
             
            青草影院天堂男人久久| aaa级精品久久久国产片| 久久久亚洲精品蜜桃臀 | 亚洲七七久久精品中文国产 | 久久久婷婷五月亚洲97号色 | 午夜精品久久久久| 欧美喷潮久久久XXXXx| 久久精品人成免费| 国产精品成人99久久久久| 久久久久久精品久久久久| 国产福利电影一区二区三区久久老子无码午夜伦不 | 精品久久久久久久国产潘金莲| 无码久久精品国产亚洲Av影片| 嫩草影院久久国产精品| 久久精品国产99久久久古代| 久久国产成人亚洲精品影院| 日韩精品久久久久久免费| 欧美大战日韩91综合一区婷婷久久青草| 少妇久久久久久久久久| 久久久国产精华液| 国产欧美一区二区久久| 久久天天躁狠狠躁夜夜2020一| 久久久91精品国产一区二区三区| 久久精品国产亚洲av麻豆蜜芽| 品成人欧美大片久久国产欧美| 精品久久久久久国产潘金莲| 久久精品国产乱子伦| 久久久国产亚洲精品| 久久久久一本毛久久久| 久久精品国产精品亚洲下载| 国产精品久久国产精品99盘| 亚洲色欲久久久综合网| 久久精品国产亚洲AV久| 久久精品国产日本波多野结衣| 亚洲日本va午夜中文字幕久久 | 久久国产乱子精品免费女| 久久久国产精品亚洲一区| 亚洲午夜久久久久久久久久 | 亚洲精品乱码久久久久久按摩 | 色婷婷综合久久久久中文| 少妇久久久久久被弄高潮|