zoukankan      html  css  js  c++  java
  • BZOJ 2020 [Usaco2010 Jan]Buying Feed,II:贪心【定义价值】

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2020

    题意:

      FJ开车去买K份食物。

      如果他的车上有X份食物,每走一里就花费X元。

      FJ的城市是一条线,总共n里路,有n+1个地方,标号0~n。

      FJ从0开始走,到n结束(不能往回走),要买m份食物。

      城里有t个商店,每个商店的位置是x[i](一个点上可能有多个商店),有f[i]份食物,每份c[i]元。

      问到达n并买m份食物的最小花费。

    题解:

      贪心。

      每一份食物实际的话费 = 它的价格 + 剩下的路程

      所以按照实际花费排序,然后依次选够m个就好啦。

    AC Code:

     1 #include <iostream>
     2 #include <stdio.h>
     3 #include <string.h>
     4 #include <vector>
     5 #include <queue>
     6 #define MAX_N 100005
     7 #define INF 10000000
     8 
     9 using namespace std;
    10 
    11 struct Edge
    12 {
    13     int dest;
    14     int len;
    15     Edge(int _dest,int _len)
    16     {
    17         dest=_dest;
    18         len=_len;
    19     }
    20     Edge(){}
    21 };
    22 
    23 struct Node
    24 {
    25     int idx;
    26     int dis;
    27     Node(int _idx,int _dis)
    28     {
    29         idx=_idx;
    30         dis=_dis;
    31     }
    32     Node(){}
    33     friend bool operator > (const Node &a,const Node &b)
    34     {
    35         return a.dis>b.dis;
    36     }
    37 };
    38 
    39 int n,m;
    40 int s,t1,t2;
    41 int ans=INF;
    42 int dis[MAX_N];
    43 vector<Edge> edge[MAX_N];
    44 priority_queue<Node,vector<Node>,greater<Node> > q;
    45 
    46 void djikstra(int start)
    47 {
    48     memset(dis,-1,sizeof(dis));
    49     dis[start]=0;
    50     q.push(Node(start,0));
    51     while(!q.empty())
    52     {
    53         Node now=q.top();
    54         q.pop();
    55         if(dis[now.idx]<now.dis) continue;
    56         for(int i=0;i<edge[now.idx].size();i++)
    57         {
    58             Edge temp=edge[now.idx][i];
    59             if(dis[temp.dest]==-1 || dis[temp.dest]>dis[now.idx]+temp.len)
    60             {
    61                 dis[temp.dest]=dis[now.idx]+temp.len;
    62                 q.push(Node(temp.dest,dis[temp.dest]));
    63             }
    64         }
    65     }
    66 }
    67 
    68 void read()
    69 {
    70     cin>>m>>n>>s>>t1>>t2;
    71     int a,b,v;
    72     for(int i=0;i<m;i++)
    73     {
    74         cin>>a>>b>>v;
    75         edge[a].push_back(Edge(b,v));
    76         edge[b].push_back(Edge(a,v));
    77     }
    78 }
    79 
    80 void solve()
    81 {
    82     djikstra(t1);
    83     ans=min(ans,dis[s]+dis[t2]);
    84     djikstra(t2);
    85     ans=min(ans,dis[s]+dis[t1]);
    86 }
    87 
    88 void print()
    89 {
    90     cout<<ans<<endl;
    91 }
    92 
    93 int main()
    94 {
    95     read();
    96     solve();
    97     print();
    98 }
  • 相关阅读:
    Mac系统杂项 (持续更新)
    黑苹果-IOS学习的开始
    WPF命令参数CommandParameter
    WPF使用RoutedCommand自定义命令
    解决iOS设备屏幕切换时页面造成的问题
    width100%,设置padding或border溢出解决方法
    linux下别名alias的设置
    cordova navigator app 对象
    jquery easyui combox实用方法记录
    seajs构建方法
  • 原文地址:https://www.cnblogs.com/Leohh/p/7629362.html
Copyright © 2011-2022 走看看