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

Description

年轻的探险家来到了一个印第安部落里。在那里他和酋长的女儿相爱了,于是便向酋长去求亲。酋长要他用10000个金币作为聘礼才答应把女儿嫁给他。探险家拿不出这么多金币,便请求酋长降低要求。酋长说:"嗯,如果你能够替我弄到大祭司的皮袄,我可以只要8000金币。如果你能够弄来他的水晶球,那么只要5000金币就行了。"探险家就跑到大祭司那里,向他要求皮袄或水晶球,大祭司要他用金币来换,或者替他弄来其他的东西,他可以降低价格。探险家于是又跑到其他地方,其他人也提出了类似的要求,或者直接用金币换,或者找到其他东西就可以降低价格。不过探险家没必要用多样东西去换一样东西,因为不会得到更低的价格。探险家现在很需要你的帮忙,让他用最少的金币娶到自己的心上人。另外他要告诉你的是,在这个部落里,等级观念十分森严。地位差距超过一定限制的两个人之间不会进行任何形式的直接接触,包括交易。他是一个外来人,所以可以不受这些限制。但是如果他和某个地位较低的人进行了交易,地位较高的的人不会再和他交易,他们认为这样等于是间接接触,反过来也一样。因此你需要在考虑所有的情况以后给他提供一个最好的方案。 
为了方便起见,我们把所有的物品从1开始进行编号,酋长的允诺也看作一个物品,并且编号总是1。每个物品都有对应的价格P,主人的地位等级L,以及一系列的替代品Ti和该替代品所对应的"优惠"Vi。如果两人地位等级差距超过了M,就不能"间接交易"。你必须根据这些数据来计算出探险家最少需要多少金币才能娶到酋长的女儿。 

Input

输入第一行是两个整数M,N(1 <= N <= 100),依次表示地位等级差距限制和物品的总数。接下来按照编号从小到大依次给出了N个物品的描述。每个物品的描述开头是三个非负整数P、L、X(X < N),依次表示该物品的价格、主人的地位等级和替代品总数。接下来X行每行包括两个整数T和V,分别表示替代品的编号和"优惠价格"。

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+枚举)相关推荐

  1. 【题解】昂贵的聘礼 POJ - 1062 (最短路 经典)⭐⭐⭐⭐

    昂贵的聘礼 POJ - 1062 你想娶酋长的女儿,但酋长要求你给一定数额金钱的聘礼.除了金钱外,酋长也允许你用部落里其他人的某物品加上一点钱作为聘礼.而其他人的物品也可以通过指定的另外一些人的某物品 ...

  2. 昂贵的聘礼 poj 1062 dijsk

    昂贵的聘礼 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 46539   Accepted: 13819 Descripti ...

  3. POJ 1062 昂贵的聘礼 (dijkstra)

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

  4. POJ 1062 昂贵的聘礼【经典的最短路问题】

    原题链接:http://poj.org/problem?id=1062 我的链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=19651 ...

  5. 解题报告:POJ - 1062 昂贵的聘礼(最短路、超级源点)

    整理的算法模板合集: ACM模板 AcWing 903. 昂贵的聘礼 [思路] 由于本题只有终点,没有起点,所以我们建一个超级源点S=0S = 0S=0 ,源点与各各点的权值就是他们的价格 如下图所示 ...

  6. POJ 1062 昂贵的聘礼

    昂贵的聘礼 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 30252   Accepted: 8465 Descriptio ...

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

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

  8. 昂贵的聘礼 Dijkstra法

    poj 1062 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 39437   Accepted: 11432 Descri ...

  9. 昂贵的聘礼「最短路」「思维」

    昂贵的聘礼 题目描述: n个物品,每个物品都有一个价值,且每个物品x都有一个替代队列,这个替代队列中,每个替代品y都有一个优惠价格c,你可以使用一个替代品y + 该替代品的优惠价格c换的所需物品x 每 ...

  10. 903. 昂贵的聘礼题解(建图挺有趣的)

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

最新文章

  1. 基于java nio的memcached客户端——xmemcached
  2. 【离散数学】命题逻辑符号化例题
  3. 前端笔记-webpack加载前端资源(图片,css等)
  4. The differences between SOAP1.1 and SOAP1.2
  5. 工作流引擎厂商有哪些_国内主要工作流厂商分析
  6. lenovo G480 安装无线驱动 linux
  7. unity学习之动画状态切换后角色沉入地面里面
  8. 309 Best Time to Buy and Sell Stock with Cooldown
  9. python 显示gif_PyQt5显示GIF图片的方法
  10. 论文总结 - Playing Atari with Deep Reinforcement Learning
  11. 【论文阅读笔记】Lightweight Image Super-Resolution with Enhanced CNN
  12. 【中科院】分子生物学-朱玉贤第四版-笔记-第11-12讲 基因功能研究技术
  13. 现要求输入一个整数n,请输出斐波那契数列的第n项
  14. NLPChina_ansj_seg JAVA 实现热词及分词统计
  15. 这些黑客故事你尽管听,不奇葩算我输!
  16. 【Linux】常用的 Linux 命令行
  17. google closure
  18. Android异形屏适配(官方方案)
  19. 一本通 搜索与回溯专栏
  20. 中移物联网JAVA开发工程师一面

热门文章

  1. 最适合程序员的电脑是什么?
  2. Redis结合Lua脚本实现高并发原子性操作
  3. 人工智能面试题86问,新手找工作必备!
  4. C# Lambda表达式使用累加器例子
  5. 实现Qt日志功能并输出到文件(qDebug\qWarning\ qCritical\qFatal)
  6. 七周七语言——Prolog(二)
  7. POJ 2063 (DP)
  8. bzoj4695 最假女选手(势能线段树/吉司机线段树)题解
  9. 杭电多校HDU 6599 I Love Palindrome String (回文树)题解
  10. Getting started with Processing 第七章总结