• <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 閱讀(838) 評論(1)  編輯 收藏 引用 所屬分類: 動態規劃
            Comments
             
            亚洲欧洲日产国码无码久久99| 国产精品99精品久久免费| 久久91亚洲人成电影网站| 久久精品人人槡人妻人人玩AV| 久久久久久久久波多野高潮| 2021国产精品久久精品| 免费精品久久天干天干| 久久久久亚洲av无码专区| 日本国产精品久久| 精品久久久无码中文字幕天天 | 久久热这里只有精品在线观看| 精品人妻伦一二三区久久| 一本色道久久99一综合| 激情五月综合综合久久69| 久久99久久成人免费播放| 国内精品久久国产大陆| 热RE99久久精品国产66热| 日韩人妻无码精品久久免费一| 人妻久久久一区二区三区| 国产91久久精品一区二区| 东京热TOKYO综合久久精品| 久久精品国产亚洲AV影院| 伊人久久大香线焦AV综合影院| 伊人久久大香线蕉综合影院首页| 久久www免费人成看国产片| 国产产无码乱码精品久久鸭| 日本福利片国产午夜久久| 久久久国产乱子伦精品作者| 国产精品99久久久精品无码| 伊人久久亚洲综合影院| 亚洲婷婷国产精品电影人久久| 国产精品无码久久四虎| 青青草原综合久久| 99久久精品久久久久久清纯| 99久久国产综合精品成人影院| 99久久精品免费看国产一区二区三区 | 久久亚洲av无码精品浪潮| 日批日出水久久亚洲精品tv| 亚洲国产成人久久综合野外| 天天综合久久一二三区| 无码国内精品久久综合88|