第8周训练总结(4.20)
坚持了一星期后,加上今天上午学长的疏导,还是不愿意放弃,这周总结一下最短路径问题和区间DP,这周参加了两场CF,第一场Div3真的惨,有两道题思路直接错误,虽然很快做出了一道,但之后的两道题一直没做出来。但是之后的Div的那场,可能是题太简单,应该是30分钟左右做出两道。
关于这次最短路径问题主要分两部分:
- dijkstra
- SPFA
在之后就是关于区间DP了
由于 之前做题遇到过Folyed算法,在此就不介绍了。
dijkstra
【题目描述】
罗老师被邀请参加一个舞会,是在城市n,而罗老师当前所处的城市为1,附近还有很多城市2~n-1,有些城市之间没有直接相连的路,有些城市之间有直接相连的路,这些路都是双向的,当然也可能有多条。
现在给出直接相邻城市的路长度,罗老师想知道从城市1到城市n,最短多少距离。
算法描述:
个人理解为贪心,首先初始化为最大值
- 从1点开始走,2点变为6,3点变为3;
- 然后从3点走,更新2点变为5;
- 接下来依次是 4点变为6,5点变为7,6点变为9
既然说是贪心,就必须要进行贪心,不然2点怎么变得更小
int i,j,k;
int n,m,t;
int p[idata][idata],dis[idata];
bool vis[idata];signed main()
{while(cin>>n>>m){int x,y,z;ms(p,0x7f);rep(i,1,m){cin>>x>>y>>z;p[y][x]=p[x][y]=min(p[x][y],z);}int s=1,e=n;rep(i,1,n) dis[i]=p[1][i];//dijkstravis[1]=1,dis[1]=0;//dis[i]从起点到i点的最短距离,vis[i]i点是否遍历过for(i=1;i<=n-1;i++)//一共需要遍历n-1个点,因为起始点已经在了{int minn=inf;for(j=1;j<=n;j++)//贪心过程,寻找距离现在所处点最近的点{if(!vis[j]&&minn>dis[j]){minn=dis[j];k=j;}}vis[k]=1;if(k==e) break;for(j=1;j<=n;j++){//已经走到第j点,更新dis[]数组if(!vis[j]&&dis[k]+p[k][j]<dis[j])dis[j]=dis[k]+p[k][j];}}if(dis[e]) cout<<dis[e]<<endl;else puts("-1");}return 0;
}
SPFA
这一部分花费了我很大功夫(打表打了好久才明白)
也在网上看到了很多关于SPFA被卡的负面消息,但这些基本的算法还是要掌握,即使没有那么强大,但它能够判断是否有负回路;
还是这个图,他是一个点全部遍历完再向下遍历并借助队列实现
比如:
- 一开始将2点和3点放入队列并更新路径
- 然后将2点更新为4点;
- 然后3点更新2,4,5点,直至最后到6点结束
struct Node
{int next;//下一条边的编号int to, dis;//这条边到达的点,及长度
}node[idata];void edge(int from,int to,int dis)
{node[++cnt].next=head[from];node[cnt].to=to;node[cnt].dis=dis;head[from]=cnt;
}
int main()
{while(cin>>n>>m){for(i=1;i<=m;i++){int x,y,z;cin>>x>>y>>z;edge(x,y,z);edge(y,x,z);}ms(dis,0x7f),ms(vis,0);vis[1]=true,dis[1]=0;q.push(1);while(!q.empty()){int s=q.front();q.pop();vis[s]=false;//类似于算法回溯for(i=head[s];i;i=node[i].next){int k=node[i].to;int distance=node[i].dis;if(dis[k]>dis[s]+distance)//更新距离{dis[k]=dis[s]+distance;if(!vis[k]){vis[k]=true;q.push(k);}}}}cout<<dis[n]<<endl;}return 0;
}
以上就是最短路径的模板。
心血来潮在CF上刷了一下午的水题,看英语看的有点头大
最后关于区间DP的总结
直接上题
给出一堆数字,每次可以移除一个数字(首尾数字不能移除),移除一个数字可以得到的分数为相邻两个数字以及他本身这三个数的乘积,最终会剩下首尾两个数字。问可以得到的最小分数为多少?
解题思路L:
如果按区间来的话
dp[i][k]+dp[k][j] 合并为dp[i][j]最后剩下的三个数显然是 a[k]*a[i]*a[j]
但要说注意的是:求最小值的时候一定要给dp区间一个很大的值,然后在转移方程的时候才能保证min之后不是0
int a[105],dp[105][105];//dp表示从第i个数到第j个数抽取完后的最小值
int n;
int main()
{cin>>n;for(int i=1;i<=n;i++)cin>>a[i];for(int i=1;i+1<n;i++)dp[i][i+2]=a[i]*a[i+1]*a[i+2];for(int len=4;len<=n;len++){for(int i=1;i+len-1<=n;i++){int j=i+len-1;dp[i][j]=99999999; for(int k=i+1;k<j;k++)//其中k表示在i...j中最后抽的牌是a[k].dp[i][j]=min(dp[i][j],dp[i][k]+dp[k][j]+a[k]*a[i]*a[j]);}}cout<<dp[1][n]<<endl;return 0;}
第8周训练总结(4.20)相关推荐
- 2020双周训练训练日志
第 3 次双周训练 VP A - 6789 签到题,按照题意模拟就行了,由于 lincong 将题目中的"中心对称"看成了"轴对称",导致 WA 了三发还不知道 ...
- WHUT第九周训练整理
WHUT第九周训练整理 写在前面的话:我的能力也有限,错误是在所难免的!因此如发现错误还请指出一同学习! 本次题解感谢ljw提供的最后四题题解,本人实在顶不住放弃了! 索引 (难度由题目自身难度与本周 ...
- WHUT第七周训练整理
WHUT第七周训练整理 祝各位武理的ACMer们,新年快乐!在接下来的一年里继续训练,为武理的ACM揭开新的篇章!同为武汉的学子,武汉加油! 索引 (难度由题目自身难度与本周做题情况进行分类,仅供新生 ...
- WHUT第八周训练整理
WHUT第八周训练整理 写在前面的话:我的能力也有限,错误是在所难免的!因此如发现错误还请指出一同学习! 索引 (难度由题目自身难度与本周做题情况进行分类,仅供新生参考!) 零.并查集与最小生成树 一 ...
- GAN靠「伪造思维」登上Nature子刊:首次合成神经活动数据,脑机接口训练速度提升20倍...
博雯 梦晨 发自 凹非寺 量子位 报道 | 公众号 QbitAI GAN这回玩了票大的,把手伸向了"人脑思维". 没错,直接就是一个"合成思维"--生成用来喂给 ...
- c语言周欢,安徽遴选20名教师参加第一届长三角民办高校教师教学技能大赛
中安在线.中安新闻客户端讯 近日,安徽省教育厅公布了第一届长三角民办高校教师教学技能大赛省级选拔结果.经专家评分.省组委会审定,遴选产生了20名参赛选手代表安徽省参加由上海.江苏.浙江.安徽三省一市教 ...
- 如何成为python 数据分析师_如何七周成为数据分析师20:了解和掌握Python的函数...
本文是<如何七周成为数据分析师>的第二十教程,如果想要了解写作初衷,可以先行阅读七周指南.温馨提示:如果您已经熟悉Python,大可不必再看这篇文章,或只挑选部分. Python之所以灵活 ...
- ayit第十周训练g题
lily的好朋友xiaoou333最近很空,他想了一件没有什么意义的事情,就是统计一篇文章里不同单词的总数.下面你的任务是帮助xiaoou333解决这个问题. Input 有多组数据,每组一行,每组就 ...
- UPC-2021个人训练赛第20场-部分题解
目录 RGB Triplets 题目描述 输入 输出 样例输入 Copy 样例输出 Copy 提示 Select Half 题目描述 输入 输出 样例输入 Copy 样例输出 Copy 提示 心灵的抚 ...
最新文章
- 也许每个农村出来的码农都有个田园梦
- 线性表之链式存储结构
- python提取word参考文献_写作相关 | word中参考文献转化为.bib格式全流程
- ASP.NET Core在Azure Kubernetes Service中的部署和管理
- Tomcat整合APR
- 2012021401
- Ubuntu 16.04中zabbix显示 :Zabbix server is not running:te information displayed may not be current.
- AI革命,通往超级人工智能之路
- Java -- Servlet面试题及答案(需更深入了解)
- 阿里P3C自定义规则后本地打包成IDEA插件
- 遇到数学公式中不认识的符号怎么办
- python实现火车票查询_python实现12306火车票查询的实例全过程
- 苹果手机最近删除的照片删除了怎么恢复?
- Git 常用命令及解释
- 昨天你用的 YYYY-MM-dd 被同事锤了吗?
- 【cookbook pandas】学习笔记 chapter9 grouping,aggregation,filtration,and transformation
- c语言祝生日快乐的程序,C语言如何编程生日快乐代码
- Android 文件的加密及解密
- 第一章 程序设计与C语言
- Django-Model操作