博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
2017年8月14日套题记录 | 普及组
阅读量:5879 次
发布时间:2019-06-19

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

写在前面

今天登洛谷发现离Noip剩下88天了??(虽然看起有点久),然后觉得似乎水了一个暑假什么也没做(虽然学了点数据结构和一些奇奇Gaygay的东西),于是打开题库发现去年Long Happy的集训套题我似乎没有提交过,那就一天一套题,顺便码个题解+心得(雾?

 


 

T2.传作业

题目描述

某十三同学一日上学迟到,此时已经开始上早自习了,所以他只好请同学帮忙把作业传到组长那里。由于刚开学不久,某十三同学还没来得及认识所有同学,所以传作业时只好找熟悉的同学。已知某十三与组长之间有N个他熟悉的同学,并且知道这些同学相互之间间隔的距离。因为每两个同学间传作业都需要下位,所以现在请你帮忙设计一种传作业的方案,使所有同学下位走动的总距离最小.

输入格式

第1行,为一个正整数N(N<=98),表示某十三与组长之间的他所熟悉的同学人数。

接下来N+2行,每行有N+2个正整数(integer),其中第I行的第J个数代表第I个同学与第J个同学之间的距离(第1个为某十三本人,第2到第N+1个依次为某十三熟悉的同学,第N+2个是组长)。

输出格式

输出包括一行,为一个正整数L,代表最短的总移动距离。

样例输入

30 3 4 5 13 0 6 7 84 6 0 7 65 7 7 0 41 8 6 4 0

样例输出

1

解题思路

    • 题意大概是要求从点1(十三同学位置)到点N+2(组长位置)的最短路径
    • 所以就是一个裸的求最短路的问题
    • 鉴于N的范围<=98,所以只需使用Floyd就能AC了

关于代码

 

1 #include 
2 #include
3 #include
4 #include
5 #include
6 7 using namespace std; 8 9 int Map[101][101];10 11 int main(){12 13 ios::sync_with_stdio(0);14 int n;15 cin >> n;16 for (int i = 1;i <= n+2;++i)17 for (int j = 1;j <= n+2;++j)18 cin >> Map[i][j];19 20 for (int k = 1;k <= n;++k) 21 for (int i = 1;i <= n+2;++i)22 for (int j = 1;j <= n+2;++j)23 Map[i][j] = min(Map[i][j] , Map[i][k]+Map[k][j]);24 25 cout << Map[1][n+2];26 return 0;27 }
传作业

 

 

 

 

T4.牛跳

题目描述

John的奶牛们计划要跳到月亮上去。它们请魔法师配制了P(1 <= P <=150,000)种药水,这些药水必需安原来的先后次序使用,但中间可以跳过一些药水不吃。每种药水有一个“强度”值 s ( 1 <= s <= 500 ),表示可以增强牛的跳跃能力。然而,药力的作用却是交替相反方向起作用,也就是说:当第奇数次吃药时,牛获得跳的更高的能力,而第偶数吃药时,却降低了跳高能力。在吃药前,牛的跳高能力当然为 0 。

每种药只能吃一次,开始时为第1次吃药。

请求出牛可能跳到的最高高度--最大跳跃能力。

输入格式

第一行:一个整数 P

下面P行:每行一个整数,表示按先后次序要吃的药水的“强度”。

输出格式

只一个整数,表示最大弹跳能力。

样例输入

872184356

样例输出e

17

解题思路

    • 又是动归
    • 作为动归段版型选手看了半天选择了看题解(:看来要加练动归了,然鹅我看了题解半天才懂pu
    • 设f[i][j]表示前i个药水中选择了奇偶性为j的个数的药的最大跳跃值。 0和1分别表示偶数和奇数 
    • 则我们对于第i个药水的决策,有选/不选两个决策
    • 若我们选择了这个药水i,则对于前i个药水,我们的奇偶性不同,若不选,则对于前i个药水奇偶性相同
    • 首先我们先处理边界条件:
      •   f[1][0] = 0     //不选择第一个药水
      •        f[1][1] = a[1]      //选择第一个药水
    • 另我们对于当前第i个药水的决策有:
      •   偶数选:       f[i][0] = f[i-1][1]-a[i]     //i-1次为1(奇数),则需要减去a[i]
      •   奇数选:       f[i][1] = f[i-1][0]+a[i]    //i-1次为0(偶数),则可以加上a[i]
    • 最后只需要取选/不选的最大值存入即可(如图

关于代码

1 #include 
2 #include
3 #include
4 #include
5 #include
6 7 using namespace std; 8 9 int n,a[150001],f[150001][2],num;10 11 int main()12 {13 ios::sync_with_stdio(0); 14 cin >> n;15 for (int i=1;i<=n;i++)16 cin >> a[i];17 18 f[1][0]=a[1];//选第一个 19 f[1][1]=0;//不选第一个 20 21 for (int i=2;i<=n;i++)22 {23 f[i][0]=max(f[i-1][1]+a[i],f[i-1][0]);24 f[i][1]=max(f[i-1][0]-a[i],f[i-1][1]);25 }26 27 num=max(f[n][0],f[n][1]);28 cout << num;29 return 0;30 }
牛跳

 


 

转载于:https://www.cnblogs.com/Yuns/p/7360490.html

你可能感兴趣的文章
so easy 前端实现多语言
查看>>
【追光者系列】HikariCP源码分析之ConcurrentBag&J.U.C SynchronousQueue、CopyOnWriteArrayList...
查看>>
kafka之旅总览
查看>>
【2018年最新】iOS面试题之第三方框架
查看>>
拼音工具类PinyinUtils
查看>>
Compose函数作用
查看>>
获取url中参数
查看>>
[译] 别再对 Angular 表单的 ControlValueAccessor 感到迷惑
查看>>
在navicat中如何新建连接数据库
查看>>
canvas系列教程05-柱状图项目3
查看>>
Kotlin 之旅4 面向对象
查看>>
Android NDK开发之旅11 JNI 数组的处理
查看>>
什么是机器学习
查看>>
Rxjs实践-各种排序算法排序过程的可视化展示
查看>>
css绘制几何图形
查看>>
键盘鼠标共享效率工具-Synergy
查看>>
iOS逆向之旅(进阶篇) — 工具(class-dump)
查看>>
CocoaPods安装指南
查看>>
认识并使用 Promise
查看>>
如何使用JavaScript UI控件(WijmoJS)构建Electron应用程序
查看>>