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;
    }

      

  • 相关阅读:
    java EL表达式中${param.name}详细
    javascript中常用坐标属性offset、scroll、client
    Oralce if ..elsif结构
    VS2013 字符串函数与VC不兼容问题解决方法
    Directory Instruction
    Timestamp
    GetCurrentTime() and CFile option
    MessageBox 参数说明
    单片机红外线接收算法
    IAR for MPS430 V7.12.1 编程规范
  • 原文地址:https://www.cnblogs.com/staginner/p/2166887.html
Copyright © 2011-2022 走看看