zoukankan      html  css  js  c++  java
  • Toy Train(贪心)

    题目链接:http://codeforces.com/contest/1130/problem/D1

    题目大意:给你n个点,然后m条运输任务,然后问你从每个点作为起点是,完成这些运输任务的最小花费?每一次运输必须是1,2,3按照这个方向来进行的,当到达n的时候,会直接到达1,这是一个圆形回路。

    具体思路:枚举每一个点,对于每一个点,判断一下从这个点开始运送完的花费,然后从这个花费里面找到一个花费最大的就可以了,这样就能保证其余的任务也都能完成。

    AC代码:

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 # define ll long long
     4 # define inf 0x3f3f3f3f
     5 const int maxn = 5e3+100;
     6 ll a[maxn];
     7 ll len[maxn];
     8 ll in[maxn];
     9 int main(){
    10 int n,m;
    11 scanf("%d %d",&n,&m);
    12 int st,ed;
    13 memset(len,inf,sizeof(len));
    14 for(int i=1;i<=m;i++){
    15 scanf("%d %d",&st,&ed);
    16 in[st]++;
    17 ll tmp=ed-st>0?ed-st:n-st+ed;//注意行驶轨迹是圆形的
    18 len[st]=min(len[st],tmp);
    19 }
    20 for(int i=1;i<=n;i++){
    21 if(!in[i])len[i]=0;
    22 }
    23 for(int i=1;i<=n;i++){
    24 ll ans=0;
    25 for(int j=1;j<=n;j++){
    26 ll tmp=(j-i>=0?j-i:n-i+j);
    27 tmp+=(in[j]-1ll)*n+len[j];
    28 ans=max(ans,tmp);
    29 }
    30 if(i==1)printf("%lld",ans);
    31 else printf(" %lld",ans);
    32 }
    33 printf("
    ");
    34 }
  • 相关阅读:
    知识点
    nodejs总结之redis模块
    nodejs总结之日志模块log4js
    各种类型的串口说明
    linux常用命令
    JAVA总结之编码
    JAVA总结之异常
    JAVA总结之方法重载
    JAVA总结之关键字static和final
    JAVA总结之数组篇
  • 原文地址:https://www.cnblogs.com/letlifestop/p/10452248.html
Copyright © 2011-2022 走看看