• <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>
            隨筆 - 87  文章 - 279  trackbacks - 0
            <2025年5月>
            27282930123
            45678910
            11121314151617
            18192021222324
            25262728293031
            1234567

            潛心看書研究!

            常用鏈接

            留言簿(19)

            隨筆分類(81)

            文章分類(89)

            相冊

            ACM OJ

            My friends

            搜索

            •  

            積分與排名

            • 積分 - 216715
            • 排名 - 117

            最新評論

            閱讀排行榜

            評論排行榜

            Dominoes
            Time Limit:1000MS? Memory Limit:65536K
            Total Submit:1022 Accepted:333

            Description
            A domino is a flat, thumbsized tile, the face of which is divided into two squares, each left blank or bearing from one to six dots. There is a row of dominoes laid out on a table:


            The number of dots in the top line is 6+1+1+1=9 and the number of dots in the bottom line is 1+5+3+2=11. The gap between the top line and the bottom line is 2. The gap is the absolute value of difference between two sums.

            Each domino can be turned by 180 degrees keeping its face always upwards.

            What is the smallest number of turns needed to minimise the gap between the top line and the bottom line?

            For the figure above it is sufficient to turn the last domino in the row in order to decrease the gap to 0. In this case the answer is 1.
            Write a program that: computes the smallest number of turns needed to minimise the gap between the top line and the bottom line.

            Input
            The first line of the input contains an integer n, 1 <= n <= 1000. This is the number of dominoes laid out on the table.

            Each of the next n lines contains two integers a, b separated by a single space, 0 <= a, b <= 6. The integers a and b written in the line i + 1 of the input file, 1 <= i <= 1000, are the numbers of dots on the i-th domino in the row, respectively, in the top line and in the bottom one.

            Output
            Output the smallest number of turns needed to minimise the gap between the top line and the bottom line.

            Sample Input

            4
            6 1
            1 5
            1 3
            1 2
            

            Sample Output

            1
            

            Source
            CEOI 1997

            #include? < iostream >
            using ? namespace ?std;

            const ? int ?MAXN? = ? 8000 ;
            const ? int ?INF? = ? 1 ? << ? 28 ;

            struct ?DATA? {
            ????
            int ?da[MAXN];
            ????
            int ?dx;
            ????
            int ?q;
            }
            ;

            DATA?dp[
            2 * MAXN];
            bool ?f[ 2 * MAXN];
            int ?queue[MAXN],?front,?rear;
            int ?main()
            {
            ????
            int ?n;
            ????
            int ?a[MAXN],?x,?y;
            ????
            int ?i,?j,?k,?w,?l;
            ????
            int ?d? = ? 0 ;
            ????
            int ?ans? = ?INF;
            ????scanf(
            " %d " ,? & n);
            ????
            for ?(i = 0 ;?i < n;?i ++ )? {
            ????????scanf(
            " %d%d " ,? & x,? & y);
            ????????a[i]?
            = ?x? - ?y;
            ????????d?
            += ?a[i];
            ????}

            ????memset(f,?
            false ,? sizeof (f));
            ????dp[d
            + 7500 ].dx? = ?d;?dp[d + 7500 ].q? = ? 0 ;?f[d + 7500 ]? = ? true ;
            ????
            for ?(i = 0 ;?i < n;?i ++ )?dp[d + 7500 ].da[i]? = ?a[i];
            ????front?
            = ? 0 ;?rear? = ? 0 ;?w? = ? 0 ;
            ????
            do ? {
            ????????
            for ?(i = 0 ;?i < n;?i ++ )? {
            ????????????j?
            = ?dp[d + 7500 ].da[i];
            ????????????k?
            = ?d?? - ?j? * ? 2 ;
            ????????????
            if ?( ! f[k + 7500 ]? || ?dp[k + 7500 ].q? > ?w? + ? 1 )? {
            ????????????????
            if ?(k? == ? 0 )? {
            ????????????????????printf(
            " %d\n " ,?w? + ? 1 );
            ????????????????????system(
            " pause " );
            ????????????????????
            return ? 0 ;
            ????????????????}

            ????????????????f[k
            + 7500 ]? = ? true ;
            ????????????????queue[rear
            ++ ]? = ?k;
            ????????????????dp[k
            + 7500 ].dx? = ?k;
            ????????????????dp[k
            + 7500 ].q? = ?w? + ? 1 ;
            ????????????????
            for ?(l = 0 ;?l < n;?l ++ )?dp[k + 7500 ].da[l]? = ?dp[d + 7500 ].da[l];
            ????????????????dp[k
            + 7500 ].da[i]? = ? - dp[d + 7500 ].da[i];
            ????????????}

            ????????}

            ????????d?
            = ?queue[front ++ ];
            ????????w?
            = ?dp[d + 7500 ].q;
            ????}
            ? while ?(front? <= ?rear);??
            ????j?
            = ? 7500 ;
            ????
            bool ?isFind? = ? false ;
            ????
            for ?(i = 0 ;?i < 7500 ;?i ++ )? {
            ????????
            if ?(f[j + i])? {
            ????????????isFind?
            = ? true ;
            ????????????
            if ?(ans? > ?dp[j + i].q)?ans? = ?dp[j + i].q;
            ????????}

            ????????
            if ?(f[j - i])? {
            ????????????isFind?
            = ? true ;
            ????????????
            if ?(ans? > ?dp[j - i].q)?ans? = ?dp[j - i].q;
            ????????}

            ????????
            if ?(isFind)? break ;
            ????}

            ????printf(
            " %d\n " ,?ans);
            ????system(
            " pause " );
            ????
            return ? 0 ;
            }

            posted on 2006-10-29 20:42 閱讀(804) 評論(0)  編輯 收藏 引用 所屬分類: ACM題目
            久久精品国产亚洲AV嫖农村妇女| 亚洲欧美精品伊人久久| 国产99久久久国产精免费| 久久久一本精品99久久精品88| 欧美日韩精品久久久免费观看| 久久国产欧美日韩精品| 亚洲AV成人无码久久精品老人| 老司机国内精品久久久久| 亚洲一区精品伊人久久伊人| 天天爽天天爽天天片a久久网| 久久国产三级无码一区二区| 99久久免费国产精精品| 最新久久免费视频| 国内精品九九久久久精品| 亚洲伊人久久大香线蕉综合图片 | 国产精品久久久99| 一本一本久久A久久综合精品| 国产 亚洲 欧美 另类 久久| 伊人久久综合精品无码AV专区 | 青青青国产精品国产精品久久久久| 精品久久久无码中文字幕天天| 欧美精品一区二区精品久久 | 精品久久人人做人人爽综合| 精品综合久久久久久888蜜芽| 久久精品中文字幕大胸| 色综合久久中文色婷婷| 久久午夜无码鲁丝片秋霞| 亚洲国产成人精品91久久久| 狠狠干狠狠久久| 99久久精品免费观看国产| 亚洲精品无码专区久久久| 亚洲伊人久久综合影院| 久久久久久国产精品免费免费| 久久se精品一区二区| 久久精品水蜜桃av综合天堂| 久久精品一本到99热免费| 久久免费视频1| 久久精品综合网| 久久亚洲精品无码AV红樱桃| 国产精品久久久久久久久免费| 久久天天躁狠狠躁夜夜avapp |