巴比伦塔。
题目就是说人们要建造巴比伦塔,给了很多种种类不同的砖,给出的三个数据依次是砖块的长宽高,(反正我是这么理解的,不过顺序无所谓)。很显然,一个长方体有三个不同的面。在三维坐标系下就是x0y,x0z,y0z平面。这个题就是说这三个面都可以使用,来堆积砖块,但是有要求,上面的砖块的底面的长宽都要一次比下面砖块的小。
不是总面积小,要注意! 哪怕是上面砖底面的某条边跟下面平面的长度相同都不可以。然后求出这样放置的砖的最高高度是多少。
好了,这就是题目的叙述
到这里,大概就知道怎么做了。
有向无环图上的DAG
其实也有好多人是按照图论来做的。。。
我的做法是先建图。然后依次从每个顶点出发求出所能达到的最大高度。
要注意的是在上下面的比较关系时,要使得上面的面的各边要小于下面的面的各边。博主在这里不小心WA了好几次T=T.
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
const int Maxsize = 3000;
typedef struct
{
int x,y,h;
} node;
int cnt;
node data[Maxsize];
int d[Maxsize];
int G[Maxsize][Maxsize];
int main()
{
int dp(int x);
void init_map();
int ncase;
int x,y,z;
int k =0;
while(cin>>ncase && ncase)
{
memset(G,0,sizeof(G));
memset(d,0,sizeof(d));
memset(data,0,sizeof(data));
cnt = 0;
for(int i = 0 ; i < ncase; i++)/*立方体砖块有三个底面,依次作为一个顶点存入*/
{
cin>>x>>y>>z;
data[cnt].x = x;
data[cnt].y = y;
data[cnt++].h = z;
data[cnt].x = y;
data[cnt].y = z;
data[cnt++].h = x;
data[cnt].x = z;
data[cnt].y = x;
data[cnt++].h = y;
}
init_map();
for(int i = 0 ; i < cnt ; i++)/*求出从每个顶点出发所能完成的最高高度*/
{
dp(i);
}
int maxt = 0;
for(int i = 0 ; i < cnt ; i++)
{
if(maxt <= d[i])
{
maxt = d[i];
}
}
printf("Case %d: maximum height = %d\n",++k,maxt);
}
return 0;
}
void init_map()/*i,j符合条件,建立从i,j的有向边,形成一个有向图*/
{
for(int i = 0 ; i < cnt ; i++)
{
for(int j = 0 ; j < cnt ; j++)
{
if((data[i].x > data[j].x && data[i].y > data[j].y )|| (data[i].x > data[j].y && data[i].y > data[j].x))/*砖块的放置方向*/
{
G[i][j] = 1;
}
}
}
}
int dp(int i)/*dp求最优解*/
{
int maxx = 0;
if(d[i] > 0)
{
return d[i];
}
for(int j = 0 ; j < cnt ; j++)
{
if(G[i][j])
{
if(maxx < dp(j))
{
maxx = dp(j);
}
}
}
return d[i] = maxx + data[i].h ;
}
然后这几有一些测试数据,大家可以测测。
/*input*/ 1 16839 5759 10114 2 17516 31052 5628 23011 7420 16213 3 4087 2750 12768 9085 12061 32226 17544 25090 21184 4 25138 25567 26967 4979 20496 10312 11368 30055 17032 13146 19883 25737 5 30525 28506 28395 22103 24852 19068 12755 11654 6562 27097 13629 15189 32086 4144 6968 6 31407 24166 13404 25563 24835 31354 921 10445 24804 7963 19319 1423 31328 10458 1946 14480 29984 18752 7 3895 18671 8260 16249 7758 15630 13307 28607 13991 11739 12517 1415 5263 17117 22826 3182 13135 25344 8023 11234 7537 8 9761 9980 29072 1202 21337 13062 22161 24006 30730 7645 27476 31694 25515 14140 22089 26522 5203 9172 4435 28318 24583 6816 4587 9654 9 26307 7175 18452 23449 6474 32435 8194 14111 24749 28211 29321 32050 12957 14163 4167 14998 7794 32311 21392 19800 7927 14906 25886 2583 15611 5001 8053 10 30966 20121 32381 15640 26205 24386 12476 15726 17266 3215 19472 11377 4698 25544 23298 14620 23088 3124 31550 18066 24257 18974 20902 25614 6158 9900 9268 22414 9599 18527 11 13712 10047 14567 18537 15989 19879 13627 4274 8388 1172 32018 3753 12389 21192 11484 18123 11745 18529 15586 5364 20160 5642 18177 9576 28579 27364 27686 29345 19490 17714 5512 21462 22627 12 8646 3497 26704 6271 13871 11530 27500 4501 8608 5809 15726 12458 16543 16475 11532 17223 3953 17025 19895 24016 18248 11277 26279 19366 8747 21977 18093 25852 29089 29164 2232 26234 29733 21107 5412 9875 13 5449 9345 27590 17575 1192 6790 696 11736 20365 17041 17893 5036 26980 1093 851 12391 20196 669 20532 29990 12282 23903 12971 32187 19572 3681 7262 26188 28530 24191 447 24234 13709 11864 6682 6002 2500 3787 5215 14 25830 1323 25908 19629 13193 7506 5991 20130 10876 19830 31592 12389 6043 9834 1776 4720 343 28995 31393 20510 31314 20678 1283 11512 4796 3475 6470 2751 880 30990 30135 29753 28365 4881 5630 2236 21333 24146 3357 5244 3080 3989 15 808 24980 31358 915 21188 3541 14023 10150 610 29010 24834 16697 5433 25000 28864 16370 28677 24078 7702 1692 19841 28704 16516 22230 32421 19818 16265 19325 29344 1463 28930 3547 17044 18968 326 12684 15635 6323 16643 25396 11613 22865 29911 21986 23127 16 13989 686 6979 31051 16477 6366 21127 4194 8682 11012 23059 1250 31248 24732 28651 20775 7981 20834 27869 7779 23625 11116 1646 15893 29409 7940 17286 16203 28019 11335 4059 7063 3785 11902 6685 14290 27142 16703 26854 13459 28529 23364 21088 19053 31236 15110 17076 11756 17 10676 289 32054 14158 5759 5223 17489 18946 10295 11201 5172 14306 7952 6602 23609 7215 6378 13866 25370 27216 8031 178 16850 11338 2700 23100 8532 11518 17568 28480 9967 2598 14886 12342 15228 27150 786 29616 6477 20754 4237 7731 19669 21211 27520 27609 5143 7000 20450 14247 18639 18 2942 12482 23727 16739 26048 28948 3301 21640 17997 23867 14786 27572 25357 12634 27290 20552 20313 14427 7358 8057 16253 20411 2385 4354 2030 23580 27883 31883 21578 31369 11503 18903 21013 31366 30380 14257 19245 27871 13366 9620 27666 21294 29442 19485 12760 15401 6212 4145 15336 22705 32521 23790 32122 21914 19 23572 12370 2771 1595 888 18094 32318 11189 27641 4296 12491 25860 3107 24787 17098 5063 27944 31248 12293 16847 3963 28480 27585 21353 32045 31696 16499 4715 9738 17347 28483 24065 24947 9823 19266 2869 12793 3991 19562 16960 9918 29755 22105 25746 30348 25826 11981 18339 12466 25491 24542 20600 8098 26678 511 15348 14668 20 16317 10674 8164 14648 12818 29966 28872 16486 6847 29938 6242 5862 24671 28167 26880 27446 30408 11639 31114 11102 22517 28015 13899 21453 8118 1365 12927 20466 13846 25033 1697 18586 13456 93 18289 31756 29168 27413 25031 31718 24843 28573 26394 27829 11806 3661 5839 9047 18183 23773 12355 15378 14886 22760 22935 1904 6160 26146 10046 26848 21 17402 29784 4168 782 24288 2348 23403 19965 14712 10638 20694 29418 30938 24314 15542 2529 23020 21619 3717 5403 16271 18243 8469 22046 30603 18287 30560 22675 25147 1020 31244 20198 26871 7909 449 7328 28486 17623 14891 10884 10944 1202 10702 24683 3525 8896 27277 24799 12512 25523 24312 25210 26360 2913 28760 17149 26684 2878 8572 12335 16332 7325 578 22 636 26664 17062 20452 9545 16985 28694 19976 10520 21473 19642 9350 23392 30564 22185 19959 42 27667 23364 25345 2411 28636 1007 20069 26661 20563 29324 13765 21308 7774 10684 9014 8217 28835 15572 15242 2304 24755 929 3418 32049 12019 19932 17622 22210 14670 21099 20556 4663 12445 22110 16761 25575 14545 18340 30611 18190 24550 18321 24082 25265 6023 24848 19522 24629 7553 23 26279 20874 4030 32490 13360 31353 30280 8718 20561 23190 8584 796 10688 26340 23936 3989 27704 27959 10213 19568 10554 13369 32048 13069 20612 4155 23430 28896 13394 30909 5961 30170 5463 27324 23930 32150 29306 9150 32725 32585 6225 414 26282 12390 11358 4888 17533 1556 12300 9491 26461 24912 14184 22705 17413 20962 20383 3609 5812 7169 20795 12287 13772 27845 6685 11256 29228 26961 27449 24 9087 8527 1212 26132 8646 11553 18628 26111 25150 17829 32049 12560 29669 4168 23051 15589 17747 28930 12411 792 25986 18738 13953 8577 1376 18486 24923 16942 1558 10701 31409 1827 8214 32302 23681 30162 28391 22501 32717 7769 28080 31600 18950 31358 12422 27805 17718 16491 26229 30113 12017 9513 28752 1016 2554 19165 6201 30465 7860 22213 13807 15445 5711 27378 19418 21995 7342 32707 26840 9708 13594 22821 25 23237 7255 11689 5004 32204 8789 23916 1200 13425 24409 6491 27656 21594 13311 3073 12039 5088 1698 23527 7449 17498 15803 19650 30556 25892 1021 18268 14367 23409 12849 29763 22043 23253 31441 21811 32627 19089 13159 2371 2157 13214 22435 10194 2542 888 8767 24113 27575 12207 22419 15374 22114 1583 7671 23203 18715 13898 32732 19106 20254 24202 29609 29919 4339 11065 1367 22971 15724 20908 32203 23380 1627 29780 9207 32366 26 11540 15234 29615 20000 23206 12029 26187 20030 16344 7238 10498 10378 14565 5541 23809 153 28919 22012 15694 6791 16741 5447 18016 16474 18605 6646 15226 4663 30000 4843 9675 11591 32688 1617 10567 21863 4490 24866 19267 3474 4786 29559 1747 19214 23411 25998 19172 12121 17892 29085 15896 29906 23337 28249 25700 31272 6255 30277 620 6275 1957 14267 23193 12404 10235 14780 8192 6557 25115 8567 15091 24864 1066 17562 15203 713 381 5212 27 5372 2298 29211 11591 254 16218 3575 6086 8668 25661 8170 1394 17559 1233 11378 5917 23513 28686 18477 30618 4305 27739 23059 22354 1489 7169 17782 5256 9897 15440 14267 7271 8897 11155 5590 20689 27896 25013 17799 32486 23872 18352 20054 12886 20470 6585 3663 29031 24322 16429 32382 11717 4275 19257 17193 30221 6231 32076 976 13336 1181 4158 18149 1032 30636 8509 19787 28691 17663 28540 10641 7442 4359 22938 3819 13256 20094 17874 5108 4851 13709 28 24808 25894 5653 4253 24527 8981 31999 31485 12314 26734 16418 27960 17193 13235 23957 13108 24592 12468 27365 10251 10310 7628 30624 21417 15122 18657 3232 17962 9141 24601 21528 19696 32344 4701 13920 23943 32692 15246 30592 21050 19331 6282 8574 21618 17834 16093 18280 4305 18979 21575 27936 4370 30636 16882 8170 22431 31025 24432 2999 6383 31226 20854 6447 11942 12437 6234 24704 8298 11393 2638 31977 24198 21151 13658 3333 2625 13401 25883 27608 26620 11663 18493 28315 22286 29 30022 29114 13127 27488 3343 12751 19427 1223 15161 707 21134 37 31670 1367 12876 24126 5070 18700 12432 31834 13445 23575 909 15008 22477 24357 317 11309 17516 6351 13102 11511 25771 17627 23311 31077 23492 6968 13310 9130 1545 19128 31887 741 20436 25483 5532 30714 3890 28031 16847 9262 19534 9721 20976 28036 9375 8626 18927 27867 13521 20019 19121 8644 13684 3854 19611 2085 13927 29410 30431 27535 9475 15372 8073 5214 2311 14637 16456 10902 9286 10592 27645 27256 24850 10296 4357 30 1767 15207 23932 5191 21886 4311 27810 4348 8302 825 24588 18753 14872 23057 3076 4958 11886 3774 9593 20436 11786 28518 2167 13352 3851 1186 27240 30322 32691 9704 29708 9636 18113 26812 32570 15003 11663 22166 29780 11751 28652 5522 907 7771 19895 28634 13784 21587 6720 26067 4533 11720 25950 14090 20383 16149 6736 3549 23117 13446 12372 14825 5805 16550 18697 9527 12195 9029 22661 28709 24961 5451 13110 24598 324 9536 7545 3289 15252 20631 14588 30938 18298 26045 27604 11 2271 31462 7517 18832 0 下面是输出
/*output*/ Case 1: maximum height = 22598 Case 2: maximum height = 52893 Case 3: maximum height = 87628 Case 4: maximum height = 128393 Case 5: maximum height = 181340 Case 6: maximum height = 145151 Case 7: maximum height = 81755 Case 8: maximum height = 157088 Case 9: maximum height = 165768 Case 10: maximum height = 183029 Case 11: maximum height = 230211 Case 12: maximum height = 221399 Case 13: maximum height = 219313 Case 14: maximum height = 204300 Case 15: maximum height = 218228 Case 16: maximum height = 264789 Case 17: maximum height = 243283 Case 18: maximum height = 295389 Case 19: maximum height = 284190 Case 20: maximum height = 357167 Case 21: maximum height = 314412 Case 22: maximum height = 287459 Case 23: maximum height = 342924 Case 24: maximum height = 288081 Case 25: maximum height = 348225 Case 26: maximum height = 321238 Case 27: maximum height = 303123 Case 28: maximum height = 364003 Case 29: maximum height = 333415 Case 30: maximum height = 383791