POJ 1062 昂贵的聘礼
来源:互联网 发布:时间矩阵图 编辑:程序博客网 时间:2024/05/22 08:20
题目链接:http://poj.org/problem?id=1062
/*题意:输入M,N分别表示地位等级差距限制和物品的总数。接下 输入 P L X 表示物品价格,主人等级,替代物品数目替代物品:T,V表示 替代物品编号和优惠价格M NP1 L1 X1T1 V1P2 L2 X2T2 V2输出最少需要的金币数。那么 在求最短路径时 需要保证 level[i]在 L1-M,L1+M之间那么 在求最短路径时 需要保证 level[i]在 L1-M,L1+M之间那么 在求最短路径时 需要保证 level[i]在 L1-M,L1+M之间思路:G[i][j] i表示替代物品编号,j表示物品的编号相当于:物品为j的 所要求的替代物品编号是0.. i...比如 10000 3 2G[2][3]=8000G[3][2]=5000;其余值为INF表示不能达到G[i][j]的值是 金币数抽象成:对于一个有向图:G[I][J] 表示起点i到终点j的权值是G[I][J]现在表示的含义是:j替代物品 代替 了 物品 i 所需的金币数目是G[i][j]原来dis[i]代表 起点到达i的最短路径是dis[i]现在dis[i]代表 物品i被替代所需的最少金币数起点为0 终点为1 因为有限制条件:等级需要在 L1-M,L1+M之间用level数组存 level[i]表示拥有物品i的人物等级是level[i]那么 在求最短路径时 需要保证 level[i]在 L1-M,L1+M之间 */#include<cstdio>#define INF 1000000000const int N=112;int G[N][N],dis[N];int level[N];void dijkstra(int l,int r,int n){ int i,pos=0,j,min; bool vis[N]={0}; for(int i=0;i<=n;++i) dis[i]=INF; for(int i=1;i<=n;++i) if(level[i]>=l&&level[i]<=r) dis[i]=G[pos][i]; vis[pos]=true; for(i=1;i<n;++i) { for(j=1,min=INF;j<=n;++j) { if(level[j]>=l&&level[j]<=r&&!vis[j]&&dis[j]<min) { min=dis[j]; pos=j; } } vis[pos]=true; for(j=1;j<=n;++j)if(!vis[j]&&level[j]>=l&&level[j]<=r){ if(dis[j]>G[pos][j]+dis[pos]){ dis[j]=G[pos][j]+dis[pos]; } } }}int main(){ int limit_level,total; int cnt; int ans=INF; int index,t_money; while(~scanf("%d %d",&limit_level,&total)){ for(int i=0;i<=total;++i) for(int j=0;j<=total;++j) G[i][j]=INF; for(int k=1;k<=total;++k) { scanf("%d %d %d",&G[0][k],&level[k],&cnt); for(int i=0;i<cnt;++i) { scanf("%d %d",&index,&t_money); G[index][k]=t_money;// why is not G[k][index]? } } for(int i=level[1]-limit_level;i<=level[1];++i) { dijkstra(i,i+limit_level,total); if(ans>dis[1]) ans=dis[1]; } printf("%d\n",ans); }}
0 0
- poj 1062 昂贵的聘礼
- POJ 1062 昂贵的聘礼
- poj 1062 昂贵的聘礼
- poj 1062 昂贵的聘礼
- poj 1062 昂贵的聘礼
- poj 1062 昂贵的聘礼
- poj 1062 昂贵的聘礼
- poj-1062-昂贵的聘礼
- poj 1062 昂贵的聘礼
- poj 1062 昂贵的聘礼
- POJ-1062-昂贵的聘礼
- POJ 1062 昂贵的聘礼
- POJ 1062 昂贵的聘礼
- POJ 1062 昂贵的聘礼
- poj 1062 -- 昂贵的聘礼
- poj 1062 昂贵的聘礼
- poj 1062 昂贵的聘礼
- POJ 1062 昂贵的聘礼
- poj1598(字符串处理)
- 【九度OJ】1029【HashMap查找】
- 每天一个Linux命令
- Code Review(一)
- MySQL索引类型总结和使用技巧以及注意事项
- POJ 1062 昂贵的聘礼
- 封装 ASIHTTPRequest 多请求管理类
- LeetCode | Combination Sum(元素的和)
- Android Activity活动探究
- facebook开源动画pop
- Phone List(字典树)
- mesa3d源代码阅读笔记
- c++ 中const的使用
- HDU_1754 I Hate It