ZOJ1093 Monkey and Banana 【DP】

一、题目

ZOJ 1093

二、题目源程序

#include <stdio.h>//一个箱子有3种h..所以总共有3*n种高度.按面积从大到小排序
#include <stdlib.h>
struct block
{
 int x,y,z,h;
}a[200];
int cmp(const void *a,const void *b)//快排,模版
{
 return ((struct block *)b)->x*((struct block *)b)->y - ((struct block *)a)->x*((struct block *)a)->y;
}
int main()
{
    int b,c,d;
     int n,max,maxmax,k=0;
     int i,j;
     while(scanf("%d",&n)!=EOF && n)
     {
          k++;
          j=0;
         for(i=0;i<n;i++)
         {
            scanf("%d%d%d",&d,&b,&c);//用d,b,c防止后面把前面覆盖。
            a[j].x=d;a[j].y=b;a[j++].z=c;
            a[j].x=d;a[j].y=c;a[j++].z=b;
            a[j].x=b;a[j].y=d;a[j++].z=c;
            a[j].x=b;a[j].y=c;a[j++].z=d;
            a[j].x=c;a[j].y=b;a[j++].z=d;
            a[j].x=c;a[j].y=d;a[j++].z=b;
          }
         qsort(a,6*n,sizeof(a[0]),cmp);
         for(i=0;i<n;i++)
         a[i].h=a[i].z;
         maxmax=a[0].h;
         for(i=0;i<6*n;i++)
         {
             max=a[i].z;
             for(j=0;j<i;j++)
             {
                if(a[i].x<a[j].x&&a[i].y<a[j].y)
                  {
                     if(a[i].z+a[j].h>max)//不重复加
                        max=a[i].z+a[j].h;
                  }
              }
              a[i].h=max;
              if(a[i].h>maxmax)
              maxmax=a[i].h;
          }
          printf("Case %d: maximum height = %d\n",k,maxmax);
     }
     return 0;
}

三、解题思路

1. 结构体利用   qsort()   函数排序。

2. 简单的动态规划问题。

四、心得体会

虽然这道题属于动态规划里的超基础水题,可是这是我做的第一道DP题目,花费了很长时间,都没有做出来。

最后看了大神的博客,才终于把它AC掉。

DP是很重要、占很大比重的一部分,一定要多做题!!

ZOJ1093 Monkey and Banana 【DP】

时间: 2024-10-15 13:31:06

ZOJ1093 Monkey and Banana 【DP】的相关文章

HDOJ 1069 Monkey and Banana 【DP】

Monkey and Banana Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 8610 Accepted Submission(s): 4452 Problem Description A group of researchers are designing an experiment to test the IQ of a monke

HDU1069 Monkey and Banana 【DP】

Monkey and Banana Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 7816    Accepted Submission(s): 4028 Problem Description A group of researchers are designing an experiment to test the IQ of a

hdoj 2391 Filthy Rich 【DP】

题目大意:有个二维数组,你从(0,0)出发,最终到(n,m), 在这个二维数组中,每个位置dp[i][j]都有一定量的黄金,你可以拾取,问你最多能失去多少,并且,你的方向有下,右, 斜向下三个方向: 策略:就是每一个都加上它的上方向与左方向的最大值,这样到最后就是最大值.详情见代码 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2391 代码: #include<stdio.h> #include<string.h> int dp[1

HDOJ1176 免费馅饼 【DP】+【经典数塔】

免费馅饼 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 23986    Accepted Submission(s): 8093 Problem Description 都说天上不会掉馅饼,但有一天gameboy正走在回家的小径上,忽然天上掉下大把大把的馅饼.说来gameboy的人品实在是太好了,这馅饼别处都不掉,就掉落在他身旁的1

nyoj 325 zb的生日 【DP】||【DFS】

两种方法: 第一种:将总数一半当做背包,用总数-2*最多能装的数目就是所求: 第二种:深搜: zb的生日 时间限制:3000 ms  |  内存限制:65535 KB 难度:2 描述 今天是阴历七月初五,acm队员zb的生日.zb正在和C小加.never在武汉集训.他想给这两位兄弟买点什么庆祝生日,经过调查,zb发现C小加和never都很喜欢吃西瓜,而且一吃就是一堆的那种,zb立刻下定决心买了一堆西瓜.当他准备把西瓜送给C小加和never的时候,遇到了一个难题,never和C小加不在一块住,只能

HDOJ4540 威威猫系列故事——打地鼠 【DP】

威威猫系列故事--打地鼠 Time Limit: 300/100 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Total Submission(s): 1445    Accepted Submission(s): 713 Problem Description 威威猫最近不务正业,每天沉迷于游戏"打地鼠". 每当朋友们劝他别太着迷游戏,应该好好工作的时候,他总是说,我是威威猫,猫打老鼠就是我的工作! 无话

NYOJ16 矩形嵌套 【DP】

矩形嵌套 时间限制:3000 ms  |  内存限制:65535 KB 难度:4 描述 有n个矩形,每个矩形可以用a,b来描述,表示长和宽.矩形X(a,b)可以嵌套在矩形Y(c,d)中当且仅当a<c,b<d或者b<c,a<d(相当于旋转X90度).例如(1,5)可以嵌套在(6,2)内,但不能嵌套在(3,4)中.你的任务是选出尽可能多的矩形排成一行,使得除最后一个外,每一个矩形都可以嵌套在下一个矩形内. 输入 第一行是一个正正数N(0<N<10),表示测试数据组数, 每组

hdoj 2046 骨牌铺方格 【DP】+【斐波那契】

dp果然不是好学的... 第n个,即2*n时,可由第n-1个的竖直排列再加一个,和第n-2个中横着排两个 所以f(n) = 1×f(n-1) + 1×f(n-2): 骨牌铺方格 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 28412    Accepted Submission(s): 13771 Problem Descripti

【题解】【数组】【DP】【Codility】MaxSliceSum &amp; MaxDoubleSliceSum

MaxSliceSum 5 -7 3 5 -2 4 -1 这个数组的最大子串是3 5 -2 4 Complexity: expected worst-case time complexity is O(N); expected worst-case space complexity is O(1), beyond input storage (not counting the storage required for input arguments). 思路 O(n) 的解法的关键,是把原来求最