zoj 1093 Monkey and Banana
2013-10-27 17:54
274 查看
DP
第一次做竟然连题目都没看懂,最后看了别人的代码,最长不下降子序列一点也不熟练。
砖头无穷多但每个类型的长方体有三种变换方法。
先求出三种变换形态,按长宽大小排序。最后求最长不下降子序列
第一次做竟然连题目都没看懂,最后看了别人的代码,最长不下降子序列一点也不熟练。
砖头无穷多但每个类型的长方体有三种变换方法。
先求出三种变换形态,按长宽大小排序。最后求最长不下降子序列
#include<cstdio> #include<algorithm> #define MAX 30 using namespace std; typedef struct { int a,b,h; }Block; Block block[MAX*3]; int h[MAX*3]; int cmp(const Block &B1,const Block &B2){ if(B1.a==B2.a) return B1.b<B2.b; return B1.a<B2.a; } int main(){ int a,b,c; int num; int cas=1; while(scanf("%d",&num),num) { int i,j; int index=0; int side[3]; for(i=0; i<num; i++) { scanf("%d %d %d",&side[0],&side[1],&side[2]); sort(side,side+3); block[index].a=side[2],block[index].b=side[1],block[index].h=side[0]; index++; block[index].a=side[2],block[index].b=side[0],block[index].h=side[1]; index++; block[index].a=side[1],block[index].b=side[0],block[index].h=side[2]; index++; } sort(block,block+index,cmp); int best=h[index-1]=block[index-1].h; for(i=index-2; i>=0; i--) { h[i]=0; for(j=i+1; j<index; j++) { if(block[i].a<block[j].a&&block[i].b<block[j].b&&h[i]<h[j]) { h[i]=h[j]; } } h[i]+=block[i].h; if(h[i]>best)best=h[i]; } printf("Case %d: maximum height = %d\n",cas++,best); } return 0; }
相关文章推荐
- ZOJ 1093 Monkey and Banana(dp)
- HDU 1069 Monkey and Banana / ZOJ 1093 Monkey and Banana (最长路径)
- zoj1093 Monkey and Banana(DP)
- zoj 1093 Monkey and Banana
- Zoj 1093 Monkey and Banana
- ZOJ 1093 Monkey and Banana
- ZOJ 1093 Monkey and Banana【DP】
- ZOJ 1093-Monkey and Banana
- zoj 1093 || hdu 1069 Monkey and Banana( Easy DP )
- Monkey and Banana (zoj 1093 动态规划)
- ZOJ 1093—Monkey and Banana 解题报告
- ZOJ 1093 Monkey and Banana
- 动态规划 zoj1093 Monkey and Banana
- ZOJ_1093_MonkeyAndBanana
- ZOJ 1093 Monkey and Banana
- ZOJ 1093 Monkey and Banana
- ZOJ 1093 Monkey and Banana
- ZOJ 1093 Monkey and Banana
- ZOJ_1093(Monkey and Banana)
- ZOJ Problem Set - 1093 Monkey and Banana