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

            風雪夢

            柳絮因風起

              C++博客 :: 首頁 :: 聯系 :: 聚合  :: 管理
              4 Posts :: 76 Stories :: 3 Comments :: 0 Trackbacks

            常用鏈接

            留言簿

            我參與的團隊

            搜索

            •  

            最新評論

            • 1.?re: LightOJ1080 Binary Simulation
            • 話說加個PushDown操作不就OK了咩?
            • --仗劍奔走天涯
            • 2.?re: 正式開博
            • 加油!
            • --leafcloudsky
            • 3.?re: 啟航杯啊
            • 太屎了!!我竟然就這么的WA了兩次,最終發現,第四題少了兩句初始化,第五題把數組開錯地方了,算法沒問題,結果就這么從四題跌到二題,太傷不起了!!可憐我調spfa調了一晚上!!尼瑪啊!!
            • --淺雨歌

            閱讀排行榜

            評論排行榜

            我承認,這道題我做了很久,大概是三天吧……所以應該把這道題答案放出來……

            啃動態規劃嘛,那肯定就是動態規劃啦!

            題目大意是有N種木塊,每種無限個,有長寬高,任意兩個當底,一個當高,把這些木塊摞起來,上面的木塊長和寬都必須比下面的小,問最高能摞多高?

            好 吧,這道題剛開始看到的時候我果斷看成了一個無限空間的背包問題,但是馬上我就發現了bug,如果真的是當背包做,第二重循環怎么寫啊……然后開始枚舉第 二個狀態……f[i]表示當第i個木塊為頂時的最高高度,每一個木塊都得比它下面的木塊小,仔仔細細想想就能發現一個木塊只能用三個,那么好吧,存儲的時 候一個當成三個存好了……

            遇到這種情況我喜歡用結構體,因為這樣一個變量就可以存入一個木塊的所有的參數,果斷就是組合數,長寬高就那么存 就行了,而且長永遠比寬長,為了保險,以所有木塊的長為主進行排序。然后開始做,第i個木塊為頂,然后開始掃它底下的木塊,因為事先排過序了,在i下面的 木塊只能是i之前的而且寬比i小的木塊(實際上,愿意掃全場也行)。

            最優子結構是當第i個為頂為最高的時候,i的下面一定存在一點k,當第 k個木塊在最頂上的時候,使得高度最高,然后以k為最底,當第i個木塊在最頂上的時候,使得高度最高,這樣一來整體高度最高。說實話,我想過當摞了前i個 木塊,使得高度最高的子結構,結果我就發現了每個木塊都有三種擺放方式,然后就是一個大bug——根本無法實現好不好……

            最優子結構找到了,然后就是寫方程了哈

            方程那段的代碼:

            if (f[i] < f[j] + a[i].g) f[i] = f[j] + a[i].g;

            a[i].g是第i個的高,j表示的是i下面的那個,每一步都要有一個初始化,就是f[i] = a[i].g。

            好了……寫完了。

            PS:其實這個靈感來自于磊哥的一個指導……原版是f[i, s]表示當第i個以s方式為頂的時候,最高的高度,然后我覺得木塊的變化有點高深,就干脆把一個木塊當成三個木塊了。。。

            特別鳴謝:磊哥ZLGG


            #include <iostream>
            #include <cstdio>
            #include <cstring>
            #include <cmath>
            #include <algorithm>
            using namespace std;
            struct data
            {
                int x, y, z;
            }a[100];
            int n, i, j, tot, x, y, z, dp[100];
            int max(int a, int b)
            {
                if (a > b) return a;
                else return b;
            }
            int min(int a, int b)
            {
                if (a < b) return a;
                else return b;
            }
            int cmp(data a, data b)
            {
                return a.x > b.x;
            }
            void add(int x, int y, int z)
            {
                tot++;
                a[tot].x = max(x, y);
                a[tot].y = min(x, y);
                a[tot].z = z;
                tot++;
                a[tot].x = max(x, z);
                a[tot].y = min(x, z);
                a[tot].z = y;
                tot++;
                a[tot].x = max(y, z);
                a[tot].y = min(y, z);
                a[tot].z = x;
            }
            int main()
            {
                int t = 1;
                while (cin >> n && n != 0)
                {
                    tot = 0;
                    memset(dp, 0, sizeof(dp));
                    for (i = 1; i <= n; i++)
                    {
                        cin >> x >> y >> z;
                        add(x, y, z);
                    }
                    sort(a + 1, a + tot + 1, cmp);
                    for (i = 1; i <= tot; i++) dp[i] = a[i].z;
                    for (i = 2; i <= tot; i++)
                      for (j = 1; j <= i; j++)
                      {
                          if (a[j].x > a[i].x && a[j].y > a[i].y)
                          {
                              dp[i] = max(dp[i], dp[j] + a[i].z);
                          }
                      }
                    int max = 0;
                    for (i = 1; i <= tot; i++)
                      if (dp[i] > max) max = dp[i];
                    cout << "Case " << t++ << ": maximum height = " << max << endl;
                }
                return 0;
            }
            posted on 2012-11-09 01:14 淺雨歌 閱讀(367) 評論(0)  編輯 收藏 引用 所屬分類: DP
            精品熟女少妇av免费久久| 精品久久久久久综合日本| 久久久久综合中文字幕| 久久精品无码av| 久久天天躁狠狠躁夜夜av浪潮| 精品99久久aaa一级毛片| 久久亚洲AV无码西西人体| 久久亚洲国产精品成人AV秋霞| 久久精品国产久精国产果冻传媒| 久久久久久久久波多野高潮| 97久久超碰国产精品2021| 久久午夜福利电影| 无码国产69精品久久久久网站| 久久电影网一区| 久久人人爽人人精品视频| 久久无码专区国产精品发布 | 亚洲女久久久噜噜噜熟女| 国产精品青草久久久久婷婷| 久久久久国产一区二区三区| 少妇高潮惨叫久久久久久| 久久毛片免费看一区二区三区| 午夜精品久久久久久毛片| 久久久久久一区国产精品| 久久亚洲AV成人出白浆无码国产| 久久狠狠一本精品综合网| 精品人妻久久久久久888| 一本久久综合亚洲鲁鲁五月天亚洲欧美一区二区 | 国产精品一区二区久久国产| 久久电影网| 久久精品国产秦先生| 久久国产热精品波多野结衣AV| 亚洲另类欧美综合久久图片区| 97久久精品人人澡人人爽| 久久777国产线看观看精品| 亚洲AV无码久久精品成人| 午夜精品久久久久久| 国产99久久久久久免费看| 久久精品国产91久久综合麻豆自制 | 日韩人妻无码精品久久久不卡| 免费无码国产欧美久久18| 亚洲欧美国产精品专区久久|