zoukankan      html  css  js  c++  java
  • UVA 301 Transportation

    UVA_301

        我们可以取一个数组p来记录列车到每一站时最多能容纳的乘客量,之后对输入的数据按起始车站升序排列,然后按顺序枚举每一个订单。如果当前订单的乘客量小于或等于列车到该站时能容纳的乘客量,则该订单可以被接受,更新p并进行递归即可。

    #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;
    }
    int main()
    {
    int i,j,k,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;
    }

      

  • 相关阅读:
    [总结] 二维ST表及其优化
    [51Nod 1515] 明辨是非
    [总结] fhq_Treap 学习笔记
    [ZJOI2008] 骑士
    [SDOI2010] 古代猪文
    [POJ 1006] 生理周期
    [POJ 2891] Strange Way to Express Integers
    [Luogu 1516] 青蛙的约会
    python第十三天
    python第十二天-----RabbitMQ
  • 原文地址:https://www.cnblogs.com/staginner/p/2166887.html
Copyright © 2011-2022 走看看