昂贵的聘礼 - poj 1062 (Dijkstra+枚举)
Time Limit: 1000MS | Memory Limit: 10000K | |
Total Submissions: 39976 | Accepted: 11596 |
Description
为了方便起见,我们把所有的物品从1开始进行编号,酋长的允诺也看作一个物品,并且编号总是1。每个物品都有对应的价格P,主人的地位等级L,以及一系列的替代品Ti和该替代品所对应的"优惠"Vi。如果两人地位等级差距超过了M,就不能"间接交易"。你必须根据这些数据来计算出探险家最少需要多少金币才能娶到酋长的女儿。
Input
Output
Sample Input
1 4 10000 3 2 2 8000 3 5000 1000 2 1 4 200 3000 2 1 4 200 50 2 0
Sample Output
5250这题可以利用Dijkstra求最短路径得出,例子中的图可以用下图表示:
关于等级限制,可以利用枚举的方法,例如酋长等级为l,等级限制为m,则可以枚举[l-m,l]一直到[l,l+m]
1 #include <iostream> 2 #include<limits.h> 3 #include<algorithm> 4 using namespace std; 5 int map[101][101],vis[101],level[101],dis[101]; 6 int level_gap,num; 7 int min_cost; 8 int Dijkstra(){ 9 for(int i=1;i<=num;i++){ 10 dis[i]=map[0][i]; 11 } 12 for(int i=0;i<=num;i++){ 13 int min_dis=INT_MAX; 14 int ind=0; 15 for(int j=0;j<=num;j++){ 16 if((!vis[j])&&(dis[j]<min_dis)){ 17 min_dis=dis[j]; 18 ind=j; 19 } 20 } 21 vis[ind]=1; 22 if(min_dis==INT_MAX) 23 break; 24 for(int j=0;j<=num;j++){ 25 if(!vis[j]&&map[ind][j]!=INT_MAX){ 26 if(map[ind][j]+dis[ind]<dis[j]){ 27 dis[j]=dis[ind]+map[ind][j]; 28 } 29 } 30 } 31 } 32 return dis[1]; 33 } 34 int main() { 35 36 cin>>level_gap>>num; 37 for(int i=0;i<=num;i++){ 38 for(int j=0;j<=num;j++){ 39 map[i][j]=INT_MAX; 40 } 41 } 42 dis[0]=0; 43 min_cost=INT_MAX; 44 for(int i=1;i<=num;i++){ 45 int value,lev,rep_num; 46 cin>>value>>lev>>rep_num; 47 map[0][i]=value; 48 level[i]=lev; 49 for(int j=0;j<rep_num;j++){ 50 int n; 51 cin>>n>>value; 52 map[n][i]=value; 53 } 54 } 55 for(int i=level[1]-level_gap;i<=level[1];i++){ 56 for(int j=1;j<=num;j++){ 57 if(level[j]>=i&&level[j]<=i+level_gap){ 58 vis[j]=0; 59 }else{ 60 vis[j]=1; 61 } 62 vis[0]=1; 63 } 64 min_cost=min(min_cost,Dijkstra()); 65 } 66 cout<<min_cost<<endl; 67 return 0; 68 }
转载于:https://www.cnblogs.com/sdxk/p/4629693.html
昂贵的聘礼 - poj 1062 (Dijkstra+枚举)相关推荐
- 【题解】昂贵的聘礼 POJ - 1062 (最短路 经典)⭐⭐⭐⭐
昂贵的聘礼 POJ - 1062 你想娶酋长的女儿,但酋长要求你给一定数额金钱的聘礼.除了金钱外,酋长也允许你用部落里其他人的某物品加上一点钱作为聘礼.而其他人的物品也可以通过指定的另外一些人的某物品 ...
- 昂贵的聘礼 poj 1062 dijsk
昂贵的聘礼 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 46539 Accepted: 13819 Descripti ...
- POJ 1062 昂贵的聘礼 (dijkstra)
昂贵的聘礼 年轻的探险家来到了一个印第安部落里.在那里他和酋长的女儿相爱了,于是便向酋长去求亲.酋长要他用10000个金币作为聘礼才答应把女儿嫁给他.探险家拿不出这么多金币,便请求酋长降低要求.酋长说 ...
- POJ 1062 昂贵的聘礼【经典的最短路问题】
原题链接:http://poj.org/problem?id=1062 我的链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=19651 ...
- 解题报告:POJ - 1062 昂贵的聘礼(最短路、超级源点)
整理的算法模板合集: ACM模板 AcWing 903. 昂贵的聘礼 [思路] 由于本题只有终点,没有起点,所以我们建一个超级源点S=0S = 0S=0 ,源点与各各点的权值就是他们的价格 如下图所示 ...
- POJ 1062 昂贵的聘礼
昂贵的聘礼 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 30252 Accepted: 8465 Descriptio ...
- POJ1062昂贵的聘礼(经典) 枚举区间 +【Dijkstra】
<题目链接> 昂贵的聘礼 Description 年轻的探险家来到了一个印第安部落里.在那里他和酋长的女儿相爱了,于是便向酋长去求亲.酋长要他用1000 ...
- 昂贵的聘礼 Dijkstra法
poj 1062 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 39437 Accepted: 11432 Descri ...
- 昂贵的聘礼「最短路」「思维」
昂贵的聘礼 题目描述: n个物品,每个物品都有一个价值,且每个物品x都有一个替代队列,这个替代队列中,每个替代品y都有一个优惠价格c,你可以使用一个替代品y + 该替代品的优惠价格c换的所需物品x 每 ...
- 903. 昂贵的聘礼题解(建图挺有趣的)
昂贵的聘礼原题 年轻的探险家来到了一个印第安部落里.在那里他和酋长的女儿相爱了,于是便向酋长去求亲.酋长要他用 10000 个金币作为聘礼才答应把女儿嫁给他.探险家拿不出这么多金币,便请求酋长降低要求 ...
最新文章
- 基于java nio的memcached客户端——xmemcached
- 【离散数学】命题逻辑符号化例题
- 前端笔记-webpack加载前端资源(图片,css等)
- The differences between SOAP1.1 and SOAP1.2
- 工作流引擎厂商有哪些_国内主要工作流厂商分析
- lenovo G480 安装无线驱动 linux
- unity学习之动画状态切换后角色沉入地面里面
- 309 Best Time to Buy and Sell Stock with Cooldown
- python 显示gif_PyQt5显示GIF图片的方法
- 论文总结 - Playing Atari with Deep Reinforcement Learning
- 【论文阅读笔记】Lightweight Image Super-Resolution with Enhanced CNN
- 【中科院】分子生物学-朱玉贤第四版-笔记-第11-12讲 基因功能研究技术
- 现要求输入一个整数n,请输出斐波那契数列的第n项
- NLPChina_ansj_seg JAVA 实现热词及分词统计
- 这些黑客故事你尽管听,不奇葩算我输!
- 【Linux】常用的 Linux 命令行
- google closure
- Android异形屏适配(官方方案)
- 一本通 搜索与回溯专栏
- 中移物联网JAVA开发工程师一面
热门文章
- 最适合程序员的电脑是什么?
- Redis结合Lua脚本实现高并发原子性操作
- 人工智能面试题86问,新手找工作必备!
- C# Lambda表达式使用累加器例子
- 实现Qt日志功能并输出到文件(qDebug\qWarning\ qCritical\qFatal)
- 七周七语言——Prolog(二)
- POJ 2063 (DP)
- bzoj4695 最假女选手(势能线段树/吉司机线段树)题解
- 杭电多校HDU 6599 I Love Palindrome String (回文树)题解
- Getting started with Processing 第七章总结