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

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

这个题目我最開始看题目看了半天,看不懂。。

可是通过看例子及答案最终看懂了。

。。

首先先解决等级的关系。

。假设等级越界。则不能交换。。所以原本等级的界限是

[rank[1]-m,rank[1]+m],可是这个边界里面会出现等级仅仅差大于m。所以等级的区间应该是

[rank[1]-m,rank[1]],[rank[1]-m+1,rank[1]+1]............等等。所以一直枚举到 [rank[1],rank[1]+m]..所以先通过枚举得到能够交换的点。

。然后就是题目的意思了。

我理解的优惠相当于是分解。

。。比方假设得到1号物品须要得到2号物品和8000金币。不就相当于1号到2号号为单向路劲,权值为8000.。

。求各个点到1号点的最短路加上这个点的价值。。

如图所看到的。

。。

                1(10000)---------->2(1000)--------->4(50)

                 |              8000                  200    |

                 |--------------------->3(3000)----------|

                    5000                             200

绘图之后一目了然。。。

然后运用dijkstra解决。

。。

。。

。。

希望各位指正我的想法。。

代码例如以下:

#include
#include
#define INF 0x3f3f3f3fconst int maxn=100+10;int m,n;int vis[maxn],dis[maxn],e[maxn][maxn];int withtin[maxn],value[maxn],ranki[maxn];int dijkstra(){ int tmp,now,i,j; memset(vis,0,sizeof(vis)); memset(dis,0x3f,sizeof(dis)); dis[1]=0; for(i=1;i<=n;i++) { tmp=INF; for(j=1;j<=n;j++) { if(!vis[j]&&withtin[j]&&dis[j]
dis[now]+e[now][j]) dis[j]=dis[now]+e[now][j]; } } tmp=INF; for(i=1;i<=n;i++) { if(dis[i]+value[i]
=ranki[1]-m+i&&ranki[j]<=ranki[1]+i) withtin[j]=1; } cost=dijkstra(); if(cost

                      

转载地址:http://ddtpl.baihongyu.com/

你可能感兴趣的文章
我对编程语言选择的理解
查看>>
6.3、Android Studio的CPU Monitor
查看>>
【java】JDK1.8时间日期库 新特性 所有java中时间Date的使用
查看>>
Android 应用开发者必看的 9 个 Tips
查看>>
关于Fragment框架,说的够清晰了。。。
查看>>
批处理写的俄罗斯方块
查看>>
ubuntu下安装加装DNS
查看>>
线性回归——最小二乘法_实例(二)
查看>>
POJ2866:Who Gets the Most Candies?(线段树 + 反素数 + 约瑟夫环)
查看>>
微信支付开发(12) 认清微信支付v2和v3
查看>>
k8s学习笔记之三:k8s快速入门
查看>>
SpringBoot慕课学习-SpringBoot开发常用技术整合
查看>>
即将毕业的一些感想
查看>>
iframe 解决跨域问题
查看>>
The existing index has no NexusIndexer descriptor
查看>>
界面收缩和扩展
查看>>
Selenium学习(14) 判断元素expected_conditions
查看>>
Linux命令之tcpdump
查看>>
(更新)Java + 腾讯企业邮箱 + javamail + SSL 发送邮件
查看>>
组合数据类型综合练习
查看>>