• <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>

            coreBugZJ

            此 blog 已棄。

            To Miss Our Children Time, The 36th ACM/ICPC Asia Regional Dalian Site —— Online Contest

            To Miss Our Children Time

            Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65768/65768 K (Java/Others)

            Problem Description
            Do you remember our children time? When we are children, we are interesting in almost everything around ourselves. A little thing or a simple game will brings us lots of happy time! LLL is a nostalgic boy, now he grows up. In the dead of night, he often misses something, including a simple game which brings him much happy when he was child. Here are the game rules: There lies many blocks on the ground, little LLL wants build "Skyscraper" using these blocks. There are three kinds of blocks signed by an integer d. We describe each block's shape is Cuboid using four integers ai, bi, ci, di. ai, bi are two edges of the block one of them is length the other is width. ci is 
            thickness of the block. We know that the ci must be vertical with earth ground. di describe the kind of the block. When di = 0 the block's length and width must be more or equal to the block's length and width which lies under the block. When di = 1 the block's length and width must be more or equal to the block's length which lies under the block and width and the block's area must be more than the block's area which lies under the block. When di = 2 the block length and width must be more than the block's length and width which lies under the block. Here are some blocks. Can you know what's the highest "Skyscraper" can be build using these blocks?
             

            Input
            The input has many test cases. 
            For each test case the first line is a integer n ( 0< n <= 1000) , the number of blocks. 
            From the second to the n+1'th lines , each line describing the i‐1'th block's a,b,c,d (1 =< ai,bi,ci <= 10^8 , d = 0 or 1 or 2). 
            The input end with n = 0.
             

            Output
            Output a line contains a integer describing the highest "Skyscraper"'s height using the n blocks.
             

            Sample Input
            3
            10 10 12 0
            10 10 12 1
            10 10 11 2
            2
            10 10 11 1
            10 10 11 1
            0
             

            Sample Output
            24
            11
             


            先排序,然后動態規劃,dp[ i ] 表示以第 i 個長方體放在頂上的最大高度。
            注意長寬相乘使用32位整數會溢出。


             1 #include <iostream>
             2 #include <algorithm>
             3 
             4 using namespace std;
             5 
             6 typedef  int  I32;
             7 typedef  long long  I64;
             8 
             9 struct Block
            10 {
            11          I64 a, b, c, d;
            12 };
            13 
            14 bool operator<const Block &a, const Block &b ) {
            15         return (  (a.a  < b.a) || 
            16                  ((a.a == b.a)&&(a.b  < b.b)) || 
            17                  ((a.a == b.a)&&(a.b == b.b)&&(a.d > b.d))
            18                );
            19 }
            20 
            21 const I32 N = 1009;
            22 
            23 I64    dp[ N ];
            24 Block  bk[ N ];
            25 
            26 int main() {
            27         I32 n, i, j;
            28         I64 ans, t;
            29         for ( ; ; ) {
            30                 cin >> n;
            31                 if ( n < 1 ) {
            32                         break;
            33                 }
            34                 for ( i = 1; i <= n; ++i ) {
            35                         cin >> bk[ i ].a >> bk[ i ].b >> bk[ i ].c >> bk[ i ].d;
            36                         if ( bk[ i ].a < bk[ i ].b ) {
            37                                 t = bk[ i ].a;
            38                                 bk[ i ].a = bk[ i ].b;
            39                                 bk[ i ].b = t;
            40                         }
            41                 }
            42                 sort( bk+1, bk+n+1 );
            43 
            44                 for ( i = 1; i <= n; ++i ) {
            45                         dp[ i ] = bk[ i ].c;
            46                 }
            47                 for ( i = 2; i <= n; ++i ) {
            48                         switch ( bk[ i ].d ) {
            49                         case 0 : 
            50                                 for ( j = 1; j < i; ++j ) {
            51                                         if ( (bk[j].a<=bk[i].a) && 
            52                                              (bk[j].b<=bk[i].b) && 
            53                                              (dp[j]+bk[i].c>dp[i]) 
            54                                            ) {
            55                                                 dp[ i ] = dp[ j ] + bk[ i ].c;
            56                                         }
            57                                 }
            58                                 break;
            59                         case 1 : 
            60                                 for ( j = 1; j < i; ++j ) {
            61                                         if ( (bk[j].a<=bk[i].a) && 
            62                                              (bk[j].b<=bk[i].b) && 
            63                                              (bk[j].a*bk[j].b < bk[i].a*bk[i].b) && 
            64                                              (dp[j]+bk[i].c>dp[i]) 
            65                                            ) {
            66                                                 dp[ i ] = dp[ j ] + bk[ i ].c;
            67                                         }
            68                                 }
            69                                 break;
            70                         case 2 : 
            71                                 for ( j = 1; j < i; ++j ) {
            72                                         if ( (bk[j].a<bk[i].a) && 
            73                                              (bk[j].b<bk[i].b) && 
            74                                              (dp[j]+bk[i].c>dp[i]) 
            75                                            ) {
            76                                                 dp[ i ] = dp[ j ] + bk[ i ].c;
            77                                         }
            78                                 }
            79                                 break;
            80                         }
            81                 }
            82 
            83                 ans = dp[ 1 ];
            84                 for ( i = 2; i <= n; ++i ) {
            85                         if ( ans < dp[ i ] ) {
            86                                 ans = dp[ i ];
            87                         }
            88                 }
            89 
            90                 cout << ans << endl;
            91         }
            92         return 0;
            93 }
            94 

            posted on 2011-09-03 18:24 coreBugZJ 閱讀(1193) 評論(0)  編輯 收藏 引用 所屬分類: ACM

            精品国产乱码久久久久久呢| 久久久久亚洲AV无码专区体验| 精品一区二区久久久久久久网站| 国产精品青草久久久久婷婷| 狠狠综合久久综合中文88| 久久AV高潮AV无码AV| 久久青青草原综合伊人| 久久无码国产专区精品| 久久99中文字幕久久| 久久亚洲精品国产精品婷婷| 国产精品久久久久久一区二区三区 | 久久综合久久自在自线精品自 | 久久精品二区| 久久精品亚洲一区二区三区浴池| 久久嫩草影院免费看夜色| 久久久久久久亚洲Av无码| 色狠狠久久综合网| 久久成人18免费网站| 久久久久综合网久久| 亚洲伊人久久大香线蕉综合图片| 国产亚洲成人久久| 999久久久免费精品国产| 亚洲av成人无码久久精品| 无码精品久久一区二区三区 | 色妞色综合久久夜夜| 伊人久久无码精品中文字幕| 精品国产综合区久久久久久| 久久精品免费观看| 亚洲精品高清国产一久久| www.久久精品| 国内精品伊人久久久久| 嫩草影院久久国产精品| 情人伊人久久综合亚洲| 久久久久国产精品| 亚洲成人精品久久| 久久99国产一区二区三区| 久久久久亚洲精品无码网址 | 久久精品免费大片国产大片| 国产成人久久精品麻豆一区| 国产亚洲成人久久| 久久人人爽人人澡人人高潮AV |