• <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
            <2006年1月>
            25262728293031
            1234567
            891011121314
            15161718192021
            22232425262728
            2930311234

            潛心看書研究!

            常用鏈接

            留言簿(19)

            隨筆分類(81)

            文章分類(89)

            相冊

            ACM OJ

            My friends

            搜索

            •  

            積分與排名

            • 積分 - 217820
            • 排名 - 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 閱讀(808) 評論(0)  編輯 收藏 引用 所屬分類: ACM題目
            久久受www免费人成_看片中文 | 亚洲精品无码成人片久久| 国产精品无码久久四虎| 精品国产福利久久久| 九九久久精品无码专区| 亚洲а∨天堂久久精品9966| 欧美伊人久久大香线蕉综合 | 久久九九久精品国产| 亚洲天堂久久久| 国产91久久精品一区二区| 久久久这里有精品中文字幕| 国产成人久久精品一区二区三区 | 久久亚洲国产中v天仙www| 国産精品久久久久久久| 亚洲精品无码久久千人斩| 精品久久久无码中文字幕| 久久久SS麻豆欧美国产日韩| 国产99久久九九精品无码| 丁香色欲久久久久久综合网| 99热热久久这里只有精品68| 久久久久亚洲AV无码永不| 欧美一级久久久久久久大片| 色综合久久88色综合天天| 久久久一本精品99久久精品88| 久久无码AV中文出轨人妻| 久久精品国产精品国产精品污 | 亚洲av成人无码久久精品| 亚洲国产精品热久久| 久久精品国产亚洲av水果派| 区亚洲欧美一级久久精品亚洲精品成人网久久久久 | 久久亚洲高清综合| 丁香久久婷婷国产午夜视频| 久久久久久久亚洲Av无码| 久久久这里只有精品加勒比| 国产巨作麻豆欧美亚洲综合久久 | 亚洲欧美国产日韩综合久久| 亚洲国产精品人久久| 亚洲国产精品久久久久婷婷软件| 国内精品人妻无码久久久影院| 亚洲中文字幕久久精品无码喷水| 中文字幕精品久久|