免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1083 | 回复: 0
打印 上一主题 下一主题

订票的贪心算法 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-12-23 14:54 |只看该作者 |倒序浏览
#include
#include
#include
#include
using namespace std;
bool included(int start, int length, int key)
{
    //头交叉
    if(key>=start && key=start && key+length-1>seatnumber>>unitnum;   
    int *start = new int[reqnum];
    for(int i=0;i>start;
    //降序
    sort(start,start+1,greater());
    vector ivec;   //胜者
    vector remain; //败者
    int acceptnumber=0;
    //第一、计算完全可以接受的套票订单的数量,最大全票数
    for(int i=0;i0 && start+reqnum-1 ivec[it1+1] &&            //不会与后面的产生冲突,保证是增益的
                     (remain[it2]-1)%unitnum::iterator it = ivec.begin();
    while(it != ivec.end())     
    {
        int tempval = *it +unitnum;   //注意这里可不是*it+unitnum-1哦
        //如果在两个已接受订单之间
        if(tempval+unitnum <*(it+1)&&tempval<seatnumber)
            it=ivec.insert(it+1,tempval);
        else
            it++;
    }
    int sumnumber=0,repindex;
    for(it = ivec.begin();it!=ivec.end();it++)
        sumnumber++;
    repindex = sumnumber;
    if(sumnumber < seatnumber)
    {
        int temp=1;
        while(temp<ivec[0])
        {
            ivec.insert(ivec.end(),temp);
            temp+=unitnum;
            sumnumber++;
        }
    }
    ofstream outfile("pj");
    outfile<<(sumnumber-acceptnumber)+acceptnumber*2<<endl<<sumnumber<<endl;
    for(int i=repindex;i<ivec.size();i++)
        outfile<<i+1<<" "<<ivec<<endl;
    for(int i=0;i<repindex;i++)
        outfile<<i+1<<" "<<ivec<<endl;
    infile.close();
    outfile.close();
    return 0;
}
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/104733/showart_2128887.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP