博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ1062 昂贵的聘礼
阅读量:5354 次
发布时间:2019-06-15

本文共 2253 字,大约阅读时间需要 7 分钟。

最短路径,Dijkstra算法。

根据题意将每种物品看成每个顶点,优惠价格看成边,便构成一有向图,然后可以用Dijkstra求解。因为有等级限制,求一次Dijkstra是不行的。思想是枚举0~L的每一种限制i,除去不在区间[rand[1]-i,rand[i]+m-i](rand[1]为酋长的等级)的顶点,然后Dijkstra,取其中最小的。
例如假设酋长等级为5,等级限制为2,那么需要枚举等级从3~5,4~6,5~7。从满足改等级范围的结点组成的子图中用Dijkstra来算出最短路径,最后求出最小值。
构图时要注意的是,酉长的承诺不是最初的源点,它是一个目标点,也就是说点到点的指向方向是由无替代品的点逐渐指向到 酉长的承诺(1点),题意说明的是一个回溯的过程,因此可以定义一个最初的源点(0点),它到其他各点的权值就是每个物品的原价,而点A到点B的权值就是 物品B在有第A号替代品情况下的优惠价。

还有知道了memset是以字节为单位的,所以初始化为最大值的时候,有时候不能用memset。

#include 
using namespace std;#define LEN 110const int INF (1<<30);int N;int M;int graph[LEN][LEN];int dist[LEN];int value[LEN];int level[LEN];bool visit[LEN];void init() { cin >> M >> N; for(int i = 0; i <= N; i++) for(int j = 0; j <= N; j++) if(i == j) graph[i][j] = 0; else graph[i][j] = INF; for(int i = 1;i <= N; i++) { int x; cin >> value[i] >> level[i] >> x; for(int j = 1; j <= x; j++) { int t, u; cin >> t >> u; graph[t][i] = u; } } } int dijkastra(){ for (int i = 1; i <= N; i++) { dist[i] = value[i]; } for (int i = 1; i <= N; i++) { int n = 0; int min = INF; for (int j = 1; j <= N; j++) { if (!visit[j] && dist[j] < min) { n = j; min = dist[j]; } } if (n == 0) break; visit[n] = true; for (int j = 1; j <= N; j++) { if (!visit[j] && dist[n] + graph[n][j] < dist[j]) { dist[j] = dist[n] + graph[n][j]; } } } return dist[1];}int main(){ init(); int result = INF; for (int i = 0; i <= M; i++) { int maxLevel = level[1] + i; for (int j = 1; j <= N; j++) { if (level[j] > maxLevel || maxLevel - level[j] > M) { visit[j] = true; } else { visit[j] = false; } } int min = dijkastra(); if (min < result) result = min; } cout << result << endl; return 0;}

  

转载于:https://www.cnblogs.com/lautsie/p/3363588.html

你可能感兴趣的文章
php环境搭建脚本
查看>>
FTP主动模式与被动模式说明
查看>>
php 编译常见错误
查看>>
MES架构
查看>>
【Python3 爬虫】15_Fiddler抓包分析
查看>>
高性能JavaScript-JS脚本加载与执行对性能的影响
查看>>
关于标签之间因为换行等问题造成的空白间距问题处理
查看>>
hdu 2767(tarjan)
查看>>
sklearn之分类模型混淆矩阵和分类报告
查看>>
MySQL各存储引擎
查看>>
项目--简单导出CSV文件
查看>>
Oracle session相关数据字典(一)
查看>>
织梦文章内容提取第一张或者多张图片输出
查看>>
C#用正则表达式 获取网页源代码标签的属性或值
查看>>
BZOJ 3399 [Usaco2009 Mar]Sand Castle城堡(贪心)
查看>>
WCF(一) 简单的认知
查看>>
[MFC][DShow]简单例子
查看>>
降序排列
查看>>
Luogu P1141 01迷宫【搜索/dfs】By cellur925
查看>>
js onclick事件传参
查看>>