| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5062 人关注过本帖
标题:草狼,你不是很厉害吗, 进来试试
只看楼主 加入收藏
Devil_W
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:9
帖 子:1160
专家分:1797
注 册:2009-9-14
收藏
得分:0 
以下是引用卧龙孔明在2010-8-16 09:18:33的发言:

这个题不难的
首先可以观察到对于这样两个区间(满足包含关系)
[       ]
  [    ]
只需要覆盖较小的区间即可(忽略大的不影响结果)。
因此先对n个线段进行预处理,并对其按照左端点排序,即形成不多于n个互不包含的区间。
类似下图
[   ]
  [   ]
     [    ]
       [    ]
         [     ]
问题转化为放上最少的点覆盖这些区间。
显然,存在一种最优覆盖,使其所有的点都在区间端点上。这样就可以dp了。
dp方程
设f表示第i个端点放图钉,覆盖i即i之前所有线段的最小端点数
则f = min{f[j]}+1 其中j(j
再处理下边界就可以了,复杂度为O(n^2)

另外,这个题应该可以贪心,可以将复杂度降得更低。

我也觉得可以是用贪心,先按纸片的长度排序。

但是复杂度可能不会比dp更低。
2010-08-16 09:29
卧龙孔明
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:59
帖 子:3872
专家分:684
注 册:2006-10-13
收藏
得分:0 
以下是引用Devil_W在2010-8-16 09:29:28的发言:


我也觉得可以是用贪心,先按纸片的长度排序。

但是复杂度可能不会比dp更低。
我想的贪心是这样的:
开始预处理和排序都一样,然后从左到右处理,每次选择一个最右边的端点,这个端点满足能够覆盖它左边的所有没有覆盖的线段。这样可以做到O(nlogn)

[ 本帖最后由 卧龙孔明 于 2010-8-16 09:35 编辑 ]

My Blog: www.aiexp.info
虽然我的路是从这里开始的,但是这里不再是乐土.感谢曾经影响过,引导过,帮助过我的董凯,飞燕,leeco,starwing,Rockcarry,soft_wind等等等等.别了,BCCN.
2010-08-16 09:34
新浪
Rank: 3Rank: 3
来 自:水星
等 级:论坛游侠
威 望:1
帖 子:770
专家分:167
注 册:2008-6-10
收藏
得分:0 
回复 50楼 卧龙孔明
你那帖子太深了,完全不会, 膜拜下。
有空教下我们 动态规划 吧, 知道你 动态规划相当牛叉。

天下皆醒,唯我独醉;  天下皆白,唯我独黑
2010-08-16 10:14
残阳之恋
Rank: 1
等 级:新手上路
帖 子:3
专家分:1
注 册:2010-7-12
收藏
得分:1 
........
2010-08-16 11:08
新浪
Rank: 3Rank: 3
来 自:水星
等 级:论坛游侠
威 望:1
帖 子:770
专家分:167
注 册:2008-6-10
收藏
得分:0 
回复 51楼 Devil_W
似乎不对,昨晚我就把样例发给你了。你整出来了没?

天下皆醒,唯我独醉;  天下皆白,唯我独黑
2010-08-16 12:43
Devil_W
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:9
帖 子:1160
专家分:1797
注 册:2009-9-14
收藏
得分:0 
以下是引用新浪在2010-8-16 12:43:54的发言:

似乎不对,昨晚我就把样例发给你了。你整出来了没?

你这题又不是让我做的,我也就没花effort去想。

你叫板的人又不是我。

话说,我们上次的比赛还没结束是吧? 我是不是也要发个贴,出个题目你贴代码啊?
2010-08-16 12:47
新浪
Rank: 3Rank: 3
来 自:水星
等 级:论坛游侠
威 望:1
帖 子:770
专家分:167
注 册:2008-6-10
收藏
得分:0 
回复 56楼 Devil_W
你愿意发就发出来是了,

天下皆醒,唯我独醉;  天下皆白,唯我独黑
2010-08-16 12:52
草狼
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:2
帖 子:577
专家分:1040
注 册:2010-4-6
收藏
得分:1 
今天才看到这贴的  这是我的代码  没OJ所以最终答案不知道对不对,你给的测试数据pass了   
代码:
#include<stdio.h>
#include<stdlib.h>
struct node
{
    int x;
    int y;
}zb[1001];
int cmp(const void *a,const void *b)
{
    return (*(struct node *)a).x-(*(struct node *)b).x;
}
int main()
{
    int n,i,tem,count,min;
    while(~scanf("%d",&n))
    {
        for(i=0;i<n;i++)
        {
            scanf("%d%d",&zb[i].x,&zb[i].y);
            if(zb[i].x>zb[i].y)
            {
                tem=zb[i].x;
                zb[i].x=zb[i].y;
                zb[i].y=tem;
            }
        }
        qsort(zb,n,sizeof(zb[0]),cmp);
        count=1;
        min=zb[0].y;
        for(i=1;i<n;i++)
        {
            if(zb[i].y<min)
                min=zb[i].y;
            if(zb[i].x>min)
            {
                count++;
                min=zb[i].y;
            }
        }
        printf("%d\n",count);
    }
    return 0;
}

还有 我要申明下,我并没说我很厉害,我承认我是菜鸟,不过要鄙视某人或某论坛,并不一定要比他们厉害才能鄙视他们吧  我爱学习,爱编程,也喜欢结交朋友,大家一起学习,不过对这论坛,我绝对的鄙视,还是不解释,不管你们怎么说 反正我鄙视这论坛

[ 本帖最后由 草狼 于 2010-8-16 18:29 编辑 ]
2010-08-16 18:24
新浪
Rank: 3Rank: 3
来 自:水星
等 级:论坛游侠
威 望:1
帖 子:770
专家分:167
注 册:2008-6-10
收藏
得分:0 
回复 58楼 草狼
不用测,不对。
"不解释" 这词已经老的不行了, 听的都想吐, 你丫的能不能换个词。
不过我量你也解释不出来, 能解释的出来,我劝你还是出来解释一下。
别想说,又不想说的,整的那么痛苦。

天下皆醒,唯我独醉;  天下皆白,唯我独黑
2010-08-16 18:31
草狼
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:2
帖 子:577
专家分:1040
注 册:2010-4-6
收藏
得分:0 
回复 59楼 新浪
错误数据给组
2010-08-16 18:38
快速回复:草狼,你不是很厉害吗, 进来试试
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.045868 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved