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

      

  • 相关阅读:
    Redis分布式锁的正确实现方式(Java版)转载
    kali 安装 Burpsuite Pro v2020.8 破解
    DVWA On KALI
    Metasploit 体系结构
    Xmodem、Ymodem、Zmodem
    Metasploit psnuffle
    Metasploit通过ssh暴力破解
    使用ms17_010渗透win7
    Metasploit快速入门(二)
    Metasploit 快速入门(一)
  • 原文地址:https://www.cnblogs.com/staginner/p/2166887.html
Copyright © 2011-2022 走看看