Pla(jdoj1006)

    题目大意:给你n个矩形,并排放在一起,你的目的是将所有的矩形全部染色。你每次染的形状为一个矩形,问:最少需要染多少次?

    注释:n<=10^6,wi , hi<=2^31-1,其中,wi和hi分别是矩形的宽和高。

      想法:第一想法是贪心,显然是不对的。在此,我们介绍一种数据结构——单调栈。顾名思义,就是维护栈里的元素是单调的。那么,在本题中,我们维护一个单调栈,每次加入一个数,判断栈顶,如果栈顶大于该数,则弹出,贡献+1,如果小于等于该数,则将该数压如栈内。最后,统计栈内元素个数,相同高度视为一种元素,贡献+=元素个数。

      下面,我们证明,为什么这玩意儿是对的。

      首先,先观察每次操作。如果压入的元素小于栈顶,我们设栈顶元素为h,除栈顶外的第一个元素的高度是 h - a ,想压入的元素的高度为 h - b ,那么,无论如何,栈顶高度的 min ( a , b ) 必须需要一次单独的染色。所以,这时,对于答案的贡献+1。然后,将栈顶元素的 a 染色,此时,剩余的高度与除栈顶外的第一个元素的高度是相同的,我们将它们视为一个元素,即——弹出。以此类推...最后,我们在栈中剩下的元素都是不相同的,这样,必须在需要元素个数次染色。

      最后,附上丑陋的代码......

 #include <iostream>
#include <cstdio>
using namespace std;
int a[];
int top=;
int main()
{
int n;
int w,h;//宽与高,显然发现,宽在本题中是没有地位的
scanf("%d",&n);
int ans=;
for(int i=;i<=n;i++)
{
scanf("%d%d",&w,&h);
a[++top]=h;//存高
while()//将元素压入栈中,并执行我们已经证明过的操作。
{
if(a[top]>a[top-]) break;
else if(a[top]-a[top-]==)//在相等时,我们只需把栈顶元素弹出即可
{
top--;
}
else
{
top--;
a[top]=h;
ans++;
}
}
}
printf("%d",ans+top);//统计栈内剩余元素个数,即可
return ;
}

      小结:错误

          1.没有判断相等,但不至于爆蛋。

          2.一直在裸贪心,不会转换想法。

          3.这与NOIP の某道T1类似,但是那道题被我dp驶过,不赘述。

    转载请注明:http://www.cnblogs.com/ShuraK/p/7853155.html

最新文章

  1. PyAutoGUI-python版的autoit/AHK
  2. DNS记录类型介绍(A记录、MX记录、NS记录等)
  3. HDU 4388 To the moon
  4. 类似区间计数的种类并查集两题--HDU 3038 &amp; POJ 1733
  5. 分布式缓存技术redis学习(三)——redis高级应用(主从、事务与锁、持久化)
  6. EF中&quot;实体类型 XXXXX 不是当前上下文的模型的一部分。&quot; 原因
  7. PHP strip_tags() 函数
  8. 关于MVC中使用dynamic
  9. hdu 2955 Robberies 背包DP
  10. Android显示GIF动画完整示例(二)
  11. java学习笔记 --- 数组
  12. PyQt4 的部件 -- CheckBox 单选框
  13. 那些年Android开发中遇到的坑
  14. java乱码问题解决
  15. vue全面介绍
  16. jquery 动态展示查询条件
  17. Oracle体系结构之数据文件管理
  18. day 76 滑动窗口 ,头像上传
  19. 2cmd 窗口 javac 错误:编码GBK的不可映射字符
  20. mongodb cmd 常用命令

热门文章

  1. C#中各种计时器 Stopwatch、TimeSpan
  2. Looks like the Spring listener was not configured for your web app!
  3. MFC关于多线程中传递窗口类指针时ASSERT_VALID出错的另类解决 转
  4. 使用Aspose将DataTable转Excel
  5. 【POJ1151】Atlantis(线段树,扫描线)
  6. CodeIgniter怎么引入公共的头部或者尾部文件(实现随意引入或分区域创建header.html,bodyer.html,footer.html)
  7. VS中,Ctrl+Shift+F无法在文件中查找
  8. play @Before 的使用
  9. NYOJ一种排序
  10. WordPress源代码压缩优化及常见问题的解决