某年ccf比赛题,ccf测试数据很独特,并且是根据你做正确的测试数据给分的,想要得满分,就一定不能放过任何一个优化的点

题目描述:

在横轴上放了n个相邻的矩形,每个矩形的宽度是1,而第i(1 ≤ i ≤ n)个矩形的高度是hi。这n个矩形构成了一个直方图。例如,下图中六个矩形的高度就分别是3, 1, 6, 5, 2, 3。


  请找出能放在给定直方图里面积最大的矩形,它的边要与坐标轴平行。对于上面给出的例子,最大矩形如下图所示的阴影部分,面积是10。

输入格式
第一行包含一个整数n,即矩形的数量(1 ≤ n ≤ 1000)。
  第二行包含n 个整数h1, h2, … , hn,相邻的数之间由空格分隔。(1 ≤ hi ≤ 10000)。hi是第i个矩形的高度。
输出格式
输出一行,包含一个整数,即给定直方图内的最大矩形的面积。
样例输入
6
3 1 6 5 2 3
样例输出
10

解题思路:

一、开始想的是能否通过动态规划的思路解决本题,保留到达当前点时所有高度的最大值。这样我就拥有所有满足矩形条件的数据组(起点、重点、高)这个算法的时间复杂度为n*max(即h高度)。

二、但是本题高度峰值是10000  而n是1000,与其相比,时间效率可能还不如单向遍历枚举法,简单粗暴的枚举所有的起点和终点再乘以最小的高,这样时间复杂度为n*n。

三、顺着单向遍历的思路继续思考,权值是由高和长来决定的,长度无疑是遍历所有矩形,那么我们是否可以直接就限制我们的高呢。

即:我们假定一个包含最优解的某点i,某点不是起始点,也不是重点,他的高为a[i],那么由他向两边扩展,他扩展的所有点其高(a[i+1],a[i-1]……)都大于a[i],那么这个相连的矩阵就是最大的矩阵了。同时,这是一个双向的遍历,循环在到达顶端及存在一个小与a[i]的高就结束。那么这个循环在大多数情况下都不会太长。其复杂度就是n*d,d很小

#include<stdio.h>
/*                      n*max动态规划算法
__int64 dp[1010][10010];
int main()
{int n,i,j;__int64 x,max;int a[1010];while(scanf("%d",&n)!=EOF){max=0;for(i=1;i<=n;i++){scanf("%d",&a[i]);if(a[i]>max)max=a[i];}for(i=1;i<=n;i++)for(j=1;j<=max;j++)dp[i][j]=0;x=max;for(i=1;i<=n;i++)for(j=1;j<=a[i];j++){if(j<=a[i-1])dp[i][j]=dp[i-1][j]+j;elsedp[i][j]=j;if(dp[i][j]>x)x=dp[i][j];}printf("%I64d\n",x);}
return 0;
}
*//*                     n*n单向遍历算法
#include<stdio.h>
int fmax(int a,int b)
{return a>b?a:b;
}
int fmin(int a,int b)
{return a<b?a:b;
}
int main()
{int n,i,j,h;int max,x;int a[1010];while(scanf("%d",&n)!=EOF){max=0;for(i=1;i<=n;i++){scanf("%d",&a[i]);max=fmax(max,a[i]);}for(i=1;i<=n;i++){h=a[i];for(j=i+1;j<=n;j++){h=fmin(h,a[j]);x=(j-i+1)*h;max=fmax(max,x);}while(i<n&&a[i+1]<a[i])i++; }printf("%d\n",max);}
return 0;
}*/#include<stdio.h>     //n*d(d很小)双向遍历算法
int fmax(int a,int b)
{return a>b?a:b;
}
int fmin(int a,int b)
{return a<b?a:b;
}
int main()
{int n,i,j,h,r,l;int max,x;int a[1010];while(scanf("%d",&n)!=EOF){max=0;for(i=1;i<=n;i++)scanf("%d",&a[i]);for(i=1;i<=n;i++){r=i+1;l=i-1;x=1;while(r<=n&&a[r]>=a[i]){x++;r++;}while(l>=1&&a[l]>=a[i]){x++;l--;}x=x*a[i];max=fmax(x,max);}printf("%d\n",max);}
return 0;
}

最大的矩形(ccf)相关推荐

  1. CCF认证历年真题 满分代码(更新至2018年12月)

    目标是集齐所有CCF认证试题的满分代码! 每次考试出题一般规律: 第一题:水题(稍微有些编程经验就可以写) 第二题:小模拟(处理比较简单的问题,掌握C++STL很有帮助) 第三题:大模拟(处理复杂的问 ...

  2. CCF认证历年真题 满分代码

    目标是集齐所有CCF认证试题的满分代码! 每次考试出题一般规律: 第一题:水题(稍微有些编程经验就可以写) 第二题:小模拟(处理比较简单的问题,掌握C++STL很有帮助) 第三题:大模拟(处理复杂的问 ...

  3. c语言炉石传说算法设计,CCF-CSP题解 201609-3 炉石传说

    模拟. 注意随从的编号在\(summon\)和\(attack\)随从死亡时都可能改变. #include using namespace std; struct tNode { int attack ...

  4. CCF 201312-3 最大的矩形[比较简单]

    问题描述 试题编号: 201312-3 试题名称: 最大的矩形 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 在横轴上放了n个相邻的矩形,每个矩形的宽度是1,而第i(1 ≤ ...

  5. 关于计算机视觉的那些论文 | CCF推荐论文导读

    目 录 1 Quality Evaluation for Image Retargeting With Instance Semantics 2 PFAN++: Bi-Directional Imag ...

  6. CCF认证历年试题解【网上跟帖,请不要使用称呼】

    程序改变现实,软件统治世界. 程序员需要有精益求精的工匠精神,追求逻辑的极简.时间的最少和存储的最省,并且懂得其中的平衡. 数据表示需要优先考虑,对于许多问题,找到表示该问题的数据结构,问题自然就解决 ...

  7. ccf认证俄罗斯方块java_CCF认证历年试题 - osc_h3robkrt的个人空间 - OSCHINA - 中文开源技术交流社区...

    CCF认证历年试题 不加索引整理会死星人orz 第一题: CCF201712-1 最小差值(100分) CCF201703-1 分蛋糕(100分) CCF201612-1 中间数(100分) CCF2 ...

  8. CCF CSP202009-2 风险人群筛查

    CCF CSP202009-2 风险人群筛查 题目描述 题目背景 某地疫情爆发后,出于"应检尽检"的原则,我们想要通知所有近期经过该高危区域的居民参与核酸检测. 问题描述 想要找出 ...

  9. CCF NOI1004 填充矩形

    问题链接:CCF NOI1004 填充矩形. 时间限制: 1000 ms  空间限制: 262144 KB 题目描述 已知矩形的大小为n×m,现用a×a的正方形填充该矩形.输入三个正整数n,m,a(n ...

最新文章

  1. 深度学习常用数据集资源(计算机视觉领域)
  2. python label怎么用_python tkinter label标签怎么使用?
  3. System.Web.Optimization找不到引用
  4. 转载:正则表达式30分钟入门教程
  5. 神经网络训练细节之batch normalization
  6. Android实战】DroidPlugin插件化应用分析
  7. Ajax(三)——XMLHttpRequst定义连接发送及其他操作
  8. 让电脑说话代码_让您的代码为您说话
  9. odoo10参考系列--命令行接口:odoo-bin
  10. Hibernate性能优化
  11. 联想高校AI精英挑战赛中大收官,“人工智能眼科机器人”获全国总决赛最后入场券
  12. matlab ctrl c,Matlab:实现CTRL + C的功能,但在代码中
  13. 清华钱颖一:什么造就了硅谷奇迹?这7个因素不可忽视
  14. C语言编程经典100 例
  15. 经典简约风格教师求职简历免费word模板
  16. yolov5m.pt triton部署
  17. android:layout_weight权重与warp_content配合使用
  18. 【Lucene】挖掘相关搜索词
  19. python爬虫——selenium+bs4爬取选股宝‘利好‘or’利空'股票信息
  20. 用Python计算现在距离春节还剩多长时间

热门文章

  1. linux私有组信息存放在哪,【Linux】Linux私有组,主要组和附加组
  2. fianl属性 java_java基础-类的高级属性(包、final、内部类)
  3. nn.Conv2d(nc, ndf, 4, 2, 1, bias=False),nc、ndf是什么?
  4. IE浏览器兼容性处理与提示
  5. HitPaw Watermark Remover视频图去除水印工具V1.2.1.1
  6. 网址发布页模板,带网址测速+域名检测功能
  7. 小龙多功能工具箱,邮件群发微信多开
  8. WordPress博客主题KRATOS双栏响应式博客主题
  9. java 线程开销_多线程的线程开销
  10. mysql数据库 集群_mysql数据库集群