uva 301

Ruratania只是指拥有资本的支配地位,并且在许多领域其中包括运输领域开展了许多新的创业活动。TransRuratania运输公司开设了从城市A到城市B的一个特快列车班次,路上有若干个停车站。这些车站接连着编号,城市A车站编号为0,城市B编号m。该公司为了提高收入开展了一个以提高客运能力为目的的实验。火车最大容客量为n。火车票的价格等于始发站和目的站(包括终点站)之间经过的火车站数,在火车从城市A出发前,就在客车经过的站点将车票订单收集起来,。来自车站S的车票订单说明所有车票都是从车站S到一个固定目的地(乘客从S站上车到乘车到其他站点)。为了防止由于客运能力的限制公司不能接受所有订单,其拒绝政策是完全是接受或完全拒绝一个站点的订单。
编写一个程序,求出由给定的A到B途中的单个车站的订单列表所决定了TransRuratania公司的可能的最大总收益。一个订单的收益是这个订单里的乘客数乘以票价。

第一行包括三个整数:火车的载客量城市,B站点编号,所有车站的车票订单数。每张车票的订单包括三个整数:起始站点终点站和乘客数。最多有22个订单。城市B的车站数 量最多是7

http://www.nocow.cn/index.php/%E9%A6%96%E9%A1%B5欢迎ACMer

#include<string.h>
#include<stdio.h>
#include<stdlib.h>
int n,d,s,ans;
int begin[30],end[30],num[30],r[30];
int cmp(const void *_p,const void *_q)
{
    int *p=(int *)_p;
    int *q=(int *)_q;
    return begin[*p]-begin[*q];
}

int dfs(int cur,int p[],int tot)
{
    int i,j,t,q[30];
    for(i=cur;i<d;i++)
        if(num[r[i]]<=n-p[begin[r[i]]])
        {
            for(j=0;j<30;j++)
                q[j]=p[j];
            for(j=begin[r[i]];j<end[r[i]];j++)
                q[j]+=num[r[i]];
            t=tot+(end[r[i]]-begin[r[i]])*num[r[i]];
            dfs(i+1,q,t);
        }
    if(i==d&&tot>ans)
            ans=tot;
            return 0;
}
int main()
{
    int i,j,p[30],tot;
    while(1)
    {
        scanf("%d%d%d",&n,&s,&d);
        if(n==0)
            break;
        for(i=0;i<d;i++)
            scanf("%d%d%d",&begin[i],&end[i],&num[i]);
        for(i=0;i<d;i++)
            r[i]=i;
        qsort(r,d,sizeof(r[0]),cmp);
        ans=0;
        for(i=0;i<d;i++)
            if(num[r[i]]<=n)
            {
                memset(p,0,sizeof(p));
                for(j=begin[r[i]];j<end[r[i]];j++)
                    p[j]+=num[r[i]];
                tot=(end[r[i]]-begin[r[i]])*num[r[i]];
                dfs(i+1,p,tot);
            }
        printf("%d\n",ans);
    }
    return 0;
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值