zoukankan      html  css  js  c++  java
  • ZOJ 1093 Monkey and Banana

    简单的DP,跟那个白书上面的嵌套矩形的模型完全一样。记忆化搜索。本人写的时候还是小心翼翼的,因为练的不是很多。

    题目就是搬砖啊,搬砖。。。生来就是搬砖的命啊。

    View Code
      1 #include <iostream>
    2 #include <algorithm>
    3 using namespace std;
    4 class Block
    5 {
    6 public:
    7 int l;
    8 int w;
    9 int h;
    10 };
    11 int edg[40][3];//记录每一块砖头的规格
    12 int g[100][100];//邻接矩阵
    13 int d[100];//dp数组
    14 int i,j,k,nblock;
    15 Block block[100];
    16 int cmp(Block a,Block b)
    17 {
    18 if(a.l == b.l)
    19 return a.w < b.w;
    20 return a.l < b.l;
    21 }
    22 int if_edg(int a,int b)//返回值为1的话表示a的长宽均大于b
    23 {
    24 int ok = 1;
    25 if(block[a].w <= block[b].w)
    26 {
    27 ok = 0;
    28 return ok;
    29 }
    30 if(block[a].l <= block[b].l)
    31 {
    32 ok = 0;
    33 return ok;
    34 }
    35 return ok;
    36 }
    37 int dp(int i)
    38 {
    39 int &ans = d[i];
    40 if(ans > 0)
    41 return ans;
    42 ans = block[i].h;
    43 for(int j = 1;j <= nblock * 3;j++)
    44 {
    45 if(g[i][j])
    46 if(dp(j) + block[i].h > ans)
    47 ans = dp(j) + block[i].h;
    48 }
    49 return ans;
    50 }
    51 int main()
    52 {
    53 int ncase = 1;
    54 while(cin>>nblock)
    55 {
    56 if(nblock == 0)
    57 break;
    58 for(i = 0;i < 100;i++)
    59 for(j = 0;j < 100;j++)
    60 g[i][j] = 0;
    61 for(i = 0;i < 100;i++)
    62 d[i] = 0;
    63 for(i = 1;i <= nblock;i++)
    64 {
    65 for(j = 0;j <= 2;j++)
    66 cin>>edg[i][j];
    67 sort(edg[i],edg[i] + 3);
    68 }
    69 /*for(i = 1;i <= nblock;i++)
    70 {
    71 for(j = 0;j <= 2;j++)
    72 cout<<edg[i][j]<<" ";
    73 cout<<endl;
    74 }
    75 cout<<endl;//看看砖头的规格排序以后的结果*/
    76 for(i = 1,j = 1;i <= nblock;i++)//构造各种砖头
    77 {
    78 block[j].l = edg[i][2];
    79 block[j].w = edg[i][1];
    80 block[j].h = edg[i][0];
    81 j++;
    82 block[j].l = edg[i][2];
    83 block[j].w = edg[i][0];
    84 block[j].h = edg[i][1];
    85 j++;
    86 block[j].l = edg[i][1];
    87 block[j].w = edg[i][0];
    88 block[j].h = edg[i][2];
    89 j++;
    90 }
    91 sort(block + 1,block + 3 * nblock + 1,cmp);
    92 /*for(i = 1;i <= nblock * 3;i++)//看看构造出来的砖头怎么样
    93 {
    94 cout<<block[i].l<<" "<<block[i].w<<" "<<block[i].h<<endl;
    95 }*/
    96 for(i = 1;i <= nblock * 3;i++)
    97 for(j = 1;j <= nblock * 3;j++)
    98 if(if_edg(i,j))
    99 g[i][j] = 1;
    100 /*for(i = 1;i <= nblock * 3;i++)
    101 {
    102 for(j = 1;j <= nblock * 3;j++)
    103 {
    104 cout<<g[i][j]<<" ";
    105 }
    106 cout<<endl;
    107 }*/
    108 for(i = 1;i <= nblock * 3;i++)
    109 dp(i);
    110 /*for(i = 1;i <= nblock * 3;i++)
    111 cout<<d[i]<<" ";*/
    112 int max = -1;
    113 for(i = 1;i <= nblock * 3;i++)
    114 if(d[i] > max)
    115 max = d[i];
    116 cout<<"Case "<<ncase++<<": maximum height = "<<max<<endl;
    117 }//while
    118 return 0;
    119 }
  • 相关阅读:
    java--io流之转换流
    java--IO流之字节流、字符流
    java--递归
    java--IO流之File类
    java --JDBC
    2018-09-15JDBC事务详解1
    2018-09-10JSP内容和标签的查看权限+9个内置对象
    2018-09-12DBUtils工具包+DBCP连接池
    2018-09-08Cookie的发送和Cookie的读取+Session基本原理
    参考博客:URI和URL的区别
  • 原文地址:https://www.cnblogs.com/zhexipinnong/p/2435294.html
Copyright © 2011-2022 走看看