zoukankan      html  css  js  c++  java
  • [wikioi]线段覆盖

    http://wikioi.com/problem/1214/ 这道题也归为贪心了。我也不是很能分辨,但想法确实是:1.有阶段最优化性;2.前一状态和后一状态有关系。

    想法:
    1.排个序是很自然的想法,假设按照左端点排序吧;
    2.然后从左往右取,那么会遇到i+1的左端和当前最右端是否冲突的问题;
    3.如果不冲突,就把i+1放进来;如果冲突,那么取i+1还是之前的那个呢,就看拿个的右端更小;
    4.因为反正两个里面取一个,不会改变左边的最多能取的线段树,而右端更小使右边能取的线段树可能更多;
    5.所以每次比较处理后,比如i处理完了,那么就计算完到i为止能取的最多线段数目,也记录了当前组合最右的断点;
    6.排序为了代码简单,就冒泡了一下,也不超时,就先这样了;

    #include <iostream>
    using namespace std;
    void swap(int &a, int &b)
    {
    	int tmp = a;
    	a = b;
    	b = tmp;
    }
    
    int main()
    {
    	int a[100][2];
    	int n;
    	cin >> n;
    	for (int i = 0; i < n; i++)
    	{
    		cin >> a[i][0];
    		cin >> a[i][1];
    		if (a[i][0] > a[i][1])
    		{
    			swap(a[i][0], a[i][1]);
    		}
    	}
    	for (int i = 0; i < n; i++)
    	{
    		for (int j = i+1; j < n; j++)
    		{
    			if (a[i][0] > a[j][0])
    			{
    				swap(a[i][0], a[j][0]);
    				swap(a[i][1], a[j][1]);
    			}
    		}
    	}
    	int rightEnd = a[0][1];
    	int sum = 1;
    	for (int i = 1; i < n; i++)
    	{
    		if ( rightEnd > a[i][0])
    		{
    			if (a[i][1] < rightEnd) rightEnd = a[i][1];
    		}
    		else
    		{
    			sum++;
    			rightEnd = a[i][1];
    		}
    	}
    	cout << sum;
    }
    

      

  • 相关阅读:
    docker容器导出导入
    docker容器stop不了问题的处理
    weblogic server 后台命令启动
    查看Linux系统版本的命令
    Oracle12c修改字符集
    Oracle导出导入时客户端字符集设置
    centos7 防火墙开放端口
    docker仓库安装
    spring boot打war包的修改内容
    连接谷歌gee
  • 原文地址:https://www.cnblogs.com/lautsie/p/3275862.html
Copyright © 2011-2022 走看看