传送门:点击打开链接

题目大意:买东西,每个东西有了替代品,拥有替代品后可以有优惠价格,每个物品的主人有自己的等级,等级超过m的不能直接或者间接交易,问买1号物品的最低价格是多少。

思路:一开始想到dfs,但等级不超过m的比较麻烦,看了别人的做法后发现把这题转化为最短路实在是太巧妙了(我太弱了),一开始的起点是0,表示什么都没有,每个物品的价格就是从0到i的权值,然后优惠价格就是u和i的权值,就这样转化为了最短路,只不过起点是0,终点是1.而等级问题的话,就依次枚举各个节点的等级,假设为最低等级,然后遍历一下,跑一跑迪杰特斯拉,算出最小值。(用这个方法枚举,dfs应该也行)。

具体看代码的注释吧。

#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<string>
#include<math.h>
#include<cmath>
#include<time.h>
#include<map>
#include<set>
#include<vector>
#include<queue>
#include<algorithm>
#include<numeric>
using namespace std;
int m,n;
const int maxn=110;
int dis[maxn],v[maxn],g[maxn][maxn],vis[maxn],vv[maxn];
int djks(){
for(int i=1;i<=n;i++){
dis[i]=g[0][i];//表示从0点出发(啥都没有的时候)
}
dis[0]=0;
vis[0]=1;
for(int i=1;i<=n;i++){
int p,minn=0x3f3f3f3f;
for(int j=1;j<=n;j++){
if(!vis[j]&&dis[j]<minn){
minn=dis[j];
p=j;
}
}
vis[p]=1;
for(int j=1;j<=n;j++){
if(!vis[j]&&dis[j]>dis[p]+g[p][j]){
dis[j]=dis[p]+g[p][j];
}
}
}
return dis[1];//(回到1点)
}
int main(){
scanf("%d%d",&m,&n);
memset(g,0x3f3f3f3f,sizeof(g));//图
for(int i=1;i<=n;i++){
int k;
scanf("%d%d%d",&g[0][i],&v[i],&k);//u物品到i物品的花费(到达u节点 去i节点的权值)
while(k--){
int u,w;
scanf("%d%d",&u,&w);
g[u][i]=w;
}
}
int minn=0x3f3f3f3f;//答案最小值
for(int i=1;i<=n;i++){//枚举每个节点的等级 将当前节点设为最低等级
int va=v[i];
if(vv[va])continue;
vv[va]=1;
memset(vis,0,sizeof(vis));
for(int j=1;j<=n;j++){
if(v[j]-va>m)vis[j]=1;//排除掉比自己高m以上的
if(v[j]<va)vis[j]=1;//排除掉比自己低的(因为枚举的是最低等级)
}
minn=min(minn,djks());
}
printf("%d\n",minn);
}

poj1062 昂贵的礼物(dijkstra+枚举)的更多相关文章

  1. POJ-1062 昂贵的聘礼---Dijkstra+枚举上界

    题目链接: https://vjudge.net/problem/POJ-1062 题目大意: 中文题 思路: 1是终点,可以额外添加一个源点0,0到任意一节点的距离就是这个点的money,最终求的是 ...

  2. POJ1062昂贵的聘礼(经典) 枚举区间 +【Dijkstra】

    <题目链接>                   昂贵的聘礼 Description 年轻的探险家来到了一个印第安部落里.在那里他和酋长的女儿相爱了,于是便向酋长去求亲.酋长要他用1000 ...

  3. poj1062昂贵的聘礼(枚举+最短路)

    题意:就是一个点能够被另一个点取代,通过花费一定的金币,注意就是你和某个人交易了,如果这个人的等级和酋长的等级差的绝对值超过m,酋长就不会和你交易了: 思路:这里要注意到,我们最终的目的是找到一条最短 ...

  4. POJ-1062 昂贵的聘礼 (最短路)

    POJ-1062 昂贵的聘礼:http://poj.org/problem?id=1062 题意: 有一个人要到1号点花费最少的钱,他可以花费一号点对应的价格,也可以先买下其他一些点,使得费用降低. ...

  5. POJ1062昂贵的聘礼(dijkstra)

    昂贵的聘礼 题目大意是说有N个物品,每个物品都有自己的价格,但同时某些物品也可以由其他的(可能不止一个)替代品,这些替代品的价格比较“优惠”,问怎么样选取可以让你的花费最少来购买到物品1 由于有N个物 ...

  6. POJ1062:昂贵的聘礼(枚举+迪杰斯特拉)

    http://poj.org/problem?id=1062 Description 年轻的探险家来到了一个印第安部落里.在那里他和酋长的女儿相爱了,于是便向酋长去求亲.酋长要他用10000个金币作为 ...

  7. POJ 1062 昂贵的聘礼(枚举限制条件——Dijkstra算法)

    题目: 年轻的探险家来到了一个印第安部落里.在那里他和酋长的女儿相爱了,于是便向酋长去求亲.酋长要他用10000个金币作为聘礼才答应把女儿嫁给他.探险家拿不出这么多金币,便请求酋长降低要求.酋长说:& ...

  8. 昂贵的聘礼 - poj 1062 (Dijkstra+枚举)

      Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 39976   Accepted: 11596 Description 年 ...

  9. poj1062昂贵的聘礼(Dijkstra**)

    /* 题意: 物主有一个物品,价值为P,地位为L, 以及一系列的替代品Ti和该替代品所对应的"优惠"Vi g[u][i] 表示的是u物品被i物品替换后的优惠价格!(u>0, ...

随机推荐

  1. object类型对象 ref参数如何理解?

    class Program { static void Main(string[] args) { Student stu = new Student { Name = "老王" ...

  2. 向linux内核增加一个系统调用-1

    验证编辑编译内核的流程,并增加新的系统调用 注意:需要/目录至少10GB空间,/boot目录500MB空间 下载内核并解压 kernel下载 百度云搬运 密码: qc8b 进入 /usr/src目录 ...

  3. ubuntu16部署gitlab

    一.gitlab的安装 1. 安装依赖包 $ sudo apt-get update #如无ssh还需安装openssh-server $ sudo apt-get install postfix c ...

  4. this、new、call和apply的相关问题

    讲解this指针的原理是个很复杂的问题,如果我们从javascript里this的实现机制来说明this,很多朋友可能会越来越糊涂,因此本篇打算换一个思路从应用的角度来讲解this指针,从这个角度理解 ...

  5. BuilderPattern(23种设计模式之一)

    设计模式六大原则(1):单一职责原则 设计模式六大原则(2):里氏替换原则 设计模式六大原则(3):依赖倒置原则 设计模式六大原则(4):接口隔离原则 设计模式六大原则(5):迪米特法则 设计模式六大 ...

  6. Linux uname命令

    一.简介 uname 命令将正在使用的操作系统名写到标准输出中. 二.语法 -a 显示 -m. -n. -r. -s 和 -v 标志指定的所有信息.不能与 -x 或 -SName 标志连用.如果 -x ...

  7. Git 之 修复bug

    前面介绍了Git版本控制,为我们省去了很多不必要的麻烦. 回滚 有没有想过,在我们开发过程中,修改需要是常有的事,如果我们现在不想要这个功能了,那么如何回到之前的版本呢?回滚,回到上一个版本. 那如果 ...

  8. GPG入门

    GPG入门   摘自https://www.jianshu.com/p/1257dbf3ed8e   Nitroethane 关注 2016.07.19 17:36* 字数 1003 阅读 6560评 ...

  9. (转)HTML&CSS——background: url() no-repeat 0 -64px;CSS中背景图片定位方法

    http://blog.csdn.net/oscar92420aaa/article/details/51304067 CSS中背景图片的定位,困扰我很久了.今天总算搞懂了,一定要记下来. 在CSS中 ...

  10. Newtonsoft Json操作类库的使用

    1.解析简单Json字符串 if (l_sSenJson != "") { JObject obj2 = (JObject)JsonConvert.DeserializeObjec ...