博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
bzoj2306: [Ctsc2011]幸福路径
阅读量:4604 次
发布时间:2019-06-09

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

被踩爆*2

这个题看起来就很乱搞,因为这个精度要求。。。(开始还猜了个一直转圈圈就可以等比数列了,然而好像很假)

反正还是无从下手

结果居然是倍增floyd,滚一维表示走了2^t步时的最大幸福度

注意初始时自己到自己幸福度为0

#include
#include
#include
#include
#include
#include
using namespace std;typedef long long LL;const int _=10;const int maxn=1e2+_;const int maxm=1e3+_;const double eps=1e-10;int n;double w[maxn],mp[2][maxn][maxn];void mem(int now){ for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) mp[now][i][j]=-(1<<30); for(int i=1;i<=n;i++)mp[now][i][i]=0;}int main(){ freopen("a.in","r",stdin); freopen("a.out","w",stdout); int m,st,x,y;double ro; scanf("%d%d",&n,&m); for(int i=1;i<=n;i++)scanf("%lf",&w[i]); scanf("%d%lf",&st,&ro); int now=0;mem(now); for(int i=1;i<=m;i++) { scanf("%d%d",&x,&y); mp[now][x][y]=w[y]*ro; } for(;ro>eps;ro*=ro) { now^=1;mem(now); for(int k=1;k<=n;k++) for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) mp[now][i][j]=max(mp[now][i][j],mp[now^1][i][k]+mp[now^1][k][j]*ro); } double ans=0; for(int i=1;i<=n;i++) ans=max(ans,mp[now][st][i]); printf("%.1lf\n",ans+w[st]); return 0;}

 

转载于:https://www.cnblogs.com/AKCqhzdy/p/10397759.html

你可能感兴趣的文章
HttpServletRequest对象方法的用法
查看>>
Android布局学习
查看>>
实时通讯与非实时通讯
查看>>
jQuery中事件绑定与解绑
查看>>
js原生Ajax的封装与使用
查看>>
周总结6
查看>>
PostgreSQL 务实应用(二/5)插入冲突
查看>>
一种公众号回复关键词机制
查看>>
java多线程入门学习(一)
查看>>
基于 Web 的 Go 语言 IDE - Wide 1.1.0 公布!
查看>>
nyist oj 138 找球号(二)(hash 表+位运算)
查看>>
Movidius软件手册阅读 2017-09-04
查看>>
pygame学习之打印文本
查看>>
Leetcode-Jump Game II
查看>>
SQL Server数据的导入导出
查看>>
[LeetCode] House Robber II
查看>>
App架构经验总结(转)
查看>>
倒计时器CountDownLatch与同步屏障CyclicBarrier
查看>>
多线程设计模式 - Future模式之JAVA原生实现
查看>>
FLASH图片上传功能—从百度编辑器UEditor里面提取出来
查看>>