题目链接: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:

 #include <iostream>
#include <stdio.h>
#include <string.h>
#include <vector>
#include <queue>
#define MAX_N 100005
#define INF 10000000 using namespace std; struct Edge
{
int dest;
int len;
Edge(int _dest,int _len)
{
dest=_dest;
len=_len;
}
Edge(){}
}; struct Node
{
int idx;
int dis;
Node(int _idx,int _dis)
{
idx=_idx;
dis=_dis;
}
Node(){}
friend bool operator > (const Node &a,const Node &b)
{
return a.dis>b.dis;
}
}; int n,m;
int s,t1,t2;
int ans=INF;
int dis[MAX_N];
vector<Edge> edge[MAX_N];
priority_queue<Node,vector<Node>,greater<Node> > q; void djikstra(int start)
{
memset(dis,-,sizeof(dis));
dis[start]=;
q.push(Node(start,));
while(!q.empty())
{
Node now=q.top();
q.pop();
if(dis[now.idx]<now.dis) continue;
for(int i=;i<edge[now.idx].size();i++)
{
Edge temp=edge[now.idx][i];
if(dis[temp.dest]==- || dis[temp.dest]>dis[now.idx]+temp.len)
{
dis[temp.dest]=dis[now.idx]+temp.len;
q.push(Node(temp.dest,dis[temp.dest]));
}
}
}
} void read()
{
cin>>m>>n>>s>>t1>>t2;
int a,b,v;
for(int i=;i<m;i++)
{
cin>>a>>b>>v;
edge[a].push_back(Edge(b,v));
edge[b].push_back(Edge(a,v));
}
} void solve()
{
djikstra(t1);
ans=min(ans,dis[s]+dis[t2]);
djikstra(t2);
ans=min(ans,dis[s]+dis[t1]);
} void print()
{
cout<<ans<<endl;
} int main()
{
read();
solve();
print();
}

BZOJ 2020 [Usaco2010 Jan]Buying Feed,II:贪心【定义价值】的更多相关文章

  1. 2020: [Usaco2010 Jan]Buying Feed, II

    2020: [Usaco2010 Jan]Buying Feed, II Time Limit: 3 Sec  Memory Limit: 64 MBSubmit: 220  Solved: 162[ ...

  2. 【BZOJ】2020: [Usaco2010 Jan]Buying Feed, II (dp)

    http://www.lydsy.com/JudgeOnline/problem.php?id=2020 和背包差不多 同样滚动数组 f[j]表示当前位置j份食物的最小价值 f[j]=min(f[j- ...

  3. BZOJ2020: [Usaco2010 Jan]Buying Feed II

    [传送门:BZOJ2020] 简要题意: 约翰开车回家,遇到了双十一节,那么就顺路买点饲料吧.回家的路程一共有E 公里,这一路上会经过N 家商店,第i 家店里有Fi 吨饲料,售价为每吨Ci 元.约翰打 ...

  4. bzoj 1783: [Usaco2010 Jan]Taking Turns【贪心+dp】

    不知道该叫贪心还是dp 倒着来,记f[0][i],f[1][i]分别为先手和后手从n走到i的最大值.先手显然是取最大的,当后手取到比先手大的时候就交换 #include<iostream> ...

  5. 洛谷 P2616 [USACO10JAN]购买饲料II Buying Feed, II

    洛谷 P2616 [USACO10JAN]购买饲料II Buying Feed, II https://www.luogu.org/problemnew/show/P2616 题目描述 Farmer ...

  6. USACO Buying Feed, II

    洛谷 P2616 [USACO10JAN]购买饲料II Buying Feed, II 洛谷传送门 JDOJ 2671: USACO 2010 Jan Silver 2.Buying Feed, II ...

  7. 【P2616】 【USACO10JAN】购买饲料II Buying Feed, II

    P2616 [USACO10JAN]购买饲料II Buying Feed, II 题目描述 Farmer John needs to travel to town to pick up K (1 &l ...

  8. bzoj 1783: [Usaco2010 Jan]Taking Turns

    1783: [Usaco2010 Jan]Taking Turns Description Farmer John has invented a new way of feeding his cows ...

  9. BZOJ 2021 [Usaco2010 Jan]Cheese Towers:dp + 贪心

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2021 题意: John要建一个奶酪塔,高度最大为m. 他有n种奶酪.第i种高度为h[i]( ...

随机推荐

  1. 微信小程序-获取用户信息(getUserInfo)

    当小程序抹杀掉这个接口的时候,多少人心凉了.. 作为一个初级web前端开发,我是更加懵逼,小程序员跑路了... 当时以及现在用的办法就是: 1.增加一个登陆或授权页 2.上线以后自动获取 3.增加一个 ...

  2. excel导出 jxl.jar包

    导入jxl.jar包, 代码如下: package com.gree; import java.io.IOException; import java.io.OutputStream; import ...

  3. Linux测网速

    $ wget https://raw.github.com/sivel/speedtest-cli/master/speedtest_cli.py$ chmod a+rx speedtest_cli. ...

  4. SM Java实现

    [摘要] 本文主要解说"国密加密算法"SM系列的Java实现方法,不涉及详细的算法剖析,在网络上找到的java实现方法比較少.切在跨语言加密解密上会存在一些问题.所以整理此文志之. ...

  5. SQLServer待优化语句查询

    SELECT top 100 (total_elapsed_time / execution_count)/1000 N'平均时间ms' ,total_elapsed_time/1000 N'总花费时 ...

  6. 用命令行执行ROBOT FRAMEWORK

    除了在ride中执行用例,我们也可以通过命令行的形式执行用例. 1.执行一整个项目 pybot+项目路径 2.执行某个测试集 pybot+测试集的路径 3.执行某个测试集里面的某个用例 pybot - ...

  7. uboot之run_command简单分析

    本文档简单分析了uboot中命令的实现.run_command函数的实现以及从uboot命令行接收并处理命令的过程. 作者: 彭东林 邮箱: pengdonglin137@163.com http:/ ...

  8. Docker入门系列5:常见问题小结

    重启容器 再次运行容器: docker start container_id 然后 docker attach container_id 就可以继续下命令了. [编辑]命名 --name [编辑]端口 ...

  9. 查看SELinux状态并关闭SELinux

    SELinux(Security-Enhanced Linux)是Linux上最杰出的新安全子系统.在linux内核级别上提供了一个灵活的强制访问控制系统(MAC),这个强制访问控制系统是建立在自由访 ...

  10. C#中的let字句应用示例

    一.应用场景 在查询表达式中,存储子表达式的结果有时很有用,这样可以在随后的子句中使用. 可以使用 let 关键字完成这一工作,该关键字可以创建一个新的范围变量,并且用您提供的表达式的结果初始化该变量 ...