Time 7:50 AM -> 11:15 AM

感觉今天考完后,我的内心是崩溃的


试题
考试包


T1:

首先看起来是个贪心,然而,然而,看到那个100%数据为n <= 2000整个人就虚了,发呆接近两小时后意识到这个应该是个dp,然后开始考虑dp方程,脑残把dp打成了n^3,果断上天。。而且在转移过程中推错多打了一个-1,于是3个wa 1个ac 6个TLE ,10分滚粗

T1 dp 正解:

使用二维dp记录当前状态,dp[i][j]表示在前i个妖精中选择了j个妖精的最小时间,转移过程如下:

1、

如果dp[i-1][j] != inf dp[i][j] = min(dp[i][j], dp[i-1][j]);

2、

如果dp[i-1][j-1] != inf 即可以转移,如果dp[i-1][j-1] < l[i] 那么dp[i][j] = min(dp[i][j], l[i] + t[i] -1),否则dp[i][j] = min(dp[i][j], dp[i-1][j-1] + t[i]);最后逆序枚举dp[n][i]输出第一个小于inf的i值即为答案

#include <cstdio>
#include <cstring>
#include <algorithm>const int maxn = 2000 + 100;int dp[maxn][maxn];
int li[maxn], ri[maxn], ti[maxn];
int n;int main () {freopen("sanae.in", "r", stdin);freopen("sanae.out", "w", stdout);scanf("%d", &n);for (int i = 1; i <= n; i++) scanf("%d %d %d", &li[i], &ri[i], &ti[i]);memset(dp, 127, sizeof(dp));for (int i = 0; i <= n; i++) dp[i][0] = 0;for (int i = 1; i <= n; i++)for (int j = 1; j <= i; j++) {if (dp[i-1][j] != 0x3f3f3f3f) {dp[i][j] = std :: min(dp[i][j], dp[i-1][j]);} if (dp[i-1][j-1] != 0x3f3f3f3f) {if (dp[i-1][j-1] < li[i]) dp[i][j] = std :: min(li[i] + ti[i] - 1, dp[i][j]);else {int cend = dp[i-1][j-1] + ti[i];if (cend <= ri[i]) {dp[i][j] = std :: min(dp[i][j], cend);}}}}for (int i = n; i >= 0; i--) if (dp[n][i] < 0x3f3f3f3f) {printf("%d", i);break;}return 0;
}/*
7
3 12 6
7 13 6
9 14 3
13 22 7
13 24 5
16 24 3
16 26 6*/

T3

历经一下午思考以及apt123大神讲解,终于算是A了这道world final的B题。考试时看到数据范围,果断的写了dfs,30分到手,也算是勉强弥补了一下第一题的坑
先来粘一下作者给的无比详细(shi fen jian lue)的题解

我们将所有给出的三元环看做点,把所有边也看成点。把三元环所对应的点与组成这个三元环的边所对应的点连线,这样我们就得到了一棵树。问题转化为:在这棵树上取一棵有最多叶子结点的子树,满足:
1、 代表原三元环的点的所有连出的边都可以选。
2、 代表原边的点只能选两条连出的边。
树形dp即可。

呵呵


再来看一下gcj给的题解

This proved to be the easiest problem in the finals for the experienced competitors.

We get some insight into the problem by noticing the graph resembles a tree. These graphs are actually called partial 2-trees. We can actually build a tree if we follow the way the graph is constructed. We build another graph that associates a node to each new added cycle of length this cycle shares an edge to an old cycle so we add an edge between the two respective nodes in the second graph. This way we have built the tree decomposition of these graphs. As on trees many problems that are hard to solve on general graphs have polynomial algorithms on this type of graphs.

Let's solve the related problem of finding the longest path in a tree. We can use dynamic programming and depth first search. We mark a node as a root. Every path in the tree has exactly one node that is closest to the root and this node splits the path in two downward paths. Now for each node in the tree we compute the longest downwards path that starts in it. To find the largest path in the tree we look at each node and at the two longest paths that start in it's children. This solves the problem in linear time.

The solution for our original problem is pretty similar. For each edge (x,y), we compute the cycle that contains it and and all the other nodes in the cycle have larger indexes. Let's call this a downward cycle since it goes the opposite direction of where the initial three nodes are. To find that number we have to look at all higher indexed nodes that were connected to this edge and try to use them as intermediary points in the cycle. So for a given intermediary point z we can build a cycle by looking at the longest downward cycle that contains the edge (x,z) and the longest downward cycle that contains the edge (z,y), use all the edges, add edge (x,y) and remove the edges (x,z) and (z,y).

We also compute the largest downward cycle which contains these two nodes but doesn't contain this edge, this is a union of the cycle that goes through these nodes and the second largest path from which we remove the edge (x,y).

呵呵

好吧我们开始自食其力

T3题解 以及 我对T3的理解:

很显然这张图不是一般的图(废话),我们不难发现这张图实际上是由若干个小三角形组成的(即题解中所说的三元组),那么对于

这种形状的图来说,我们只能从中选取两个三角形来进行操作,从而推知,对于任意一条边,最多只有两个与之相连三角形被选取,因此,可以选择从四周向中间的123转移
设a数组记录了每个点连出去的两个点,用每个后加入点的标号表示三角形的标号,b数组代表从其余两个方向递推过来时的最大值,

即图中的7 -> 5 和 6 -> 5,c数组表示通过1、2、3边的最大值,为保证转移正确在读入时直接保证a[i][0] < a[i][1],之后每一步根据转移目标是否为123的三角形进行分情况讨论并转移,注意每一步需要尝试更新ans值, ans值并不一定会在123三角形中取得。注意转移细节,详见代码

#include <cstdio>
#include <algorithm>
#include <cstring>const int maxn = 100000 + 100;
int a[maxn][2];
int b[maxn][2];
int c[100][100];
int n;
int ans = 0;int main () {freopen("aya.in", "r", stdin);freopen("aya.out", "w", stdout);scanf("%d", &n);for (int i = 4; i <= n; i++) {scanf("%d %d", &a[i][0], &a[i][1]);if (a[i][0] > a[i][1]) {int t = a[i][0];a[i][0] = a[i][1];a[i][1] = t;}}for (int i = n; i >= 4; i--) {if (a[i][1] < 4) {ans = std :: max(ans, c[a[i][0]][a[i][1]] + b[i][1] + b[i][0] + 3);c[a[i][0]][a[i][1]] = std :: max(c[a[i][0]][a[i][1]], b[i][1] + b[i][0] + 1);} else {if (a[a[i][1]][0] == a[i][0]) {ans = std :: max(ans, b[a[i][1]][0] + b[i][0] + b[i][1] + 3);b[a[i][1]][0] = std :: max(b[a[i][1]][0], b[i][0] + b[i][1] + 1);} else {ans = std :: max(ans, b[a[i][1]][1] + b[i][1] + b[i][0] + 3);b[a[i][1]][1] = std :: max(b[a[i][1]][1], b[i][0] + b[i][1] + 1);}}}ans = std :: max(ans, c[1][2] + c[2][3] + c[1][3] + 3);printf("%d", ans);return 0;
}

以及R神的pascal代码

var
n,i,j,ans:longint;
a,b:array[1..100000,1..2]of longint;
bb:array[1..3,1..3]of longint;
function max(a,b:longint):longint;
beginif a>b then exit(a);exit(b);
end;
beginassign(input,'aya.in');reset(input);assign(output,'aya.out');rewrite(output);readln(n);for i:=4 to n dobeginreadln(a[i,1],a[i,2]);if a[i,1]>a[i,2] thenbeginj:=a[i,1];a[i,1]:=a[i,2];a[i,2]:=j;end;end;for i:=n downto 4 dobeginif a[i,2]<4 thenbeginans:=max(ans,bb[a[i,1],a[i,2]]+b[i,1]+b[i,2]+3);bb[a[i,1],a[i,2]]:=max(bb[a[i,1],a[i,2]],b[i,1]+b[i,2]+1);endelsebeginif a[a[i,2],1]=a[i,1] thenbeginans:=max(ans,b[a[i,2],1]+b[i,1]+b[i,2]+3);b[a[i,2],1]:=max(b[a[i,2],1],b[i,1]+b[i,2]+1);endelsebeginans:=max(ans,b[a[i,2],2]+b[i,1]+b[i,2]+3);b[a[i,2],2]:=max(b[a[i,2],2],b[i,1]+b[i,2]+1);end;end;end;ans:=max(ans,bb[1,2]+bb[1,3]+bb[2,3]+3);writeln(ans);close(input);close(output);
end.


转载于:https://www.cnblogs.com/CtsNevermore/p/6000243.html

2016 10 26考试 NOIP模拟赛 杂题相关推荐

  1. 【2018.10.18】noip模拟赛Day2 地球危机(2018年第九届蓝桥杯C/C++A组省赛 三体攻击)...

    题目描述 三体人将对地球发起攻击.为了抵御攻击,地球人派出了 $A × B × C$ 艘战舰,在太 空中排成一个 $A$ 层 $B$ 行 $C$ 列的立方体.其中,第 $i$ 层第 $j$ 行第 $k ...

  2. 10.1日NOIP模拟赛

    十月一日国庆狂欢!!题目大放送! T1:最接近神的人 题目: [问题描述] 因小CC平时不遵守规矩,被伟大的石老师下了符文之语,为了破解了符文之语,小CC不小心开启了通往地下的道路,当他走到最底层时, ...

  3. 【2018.10.20】noip模拟赛Day3 二阶和

    今年BJ省选某题的弱化版-- 这看起来就没那么难了,有几种方法维护,这里提两种. 第一种(傻逼的我写的) 维护 一维&二维前缀和. 对于一个长度为$m$的序列$b_1,b_2,...,b_m$ ...

  4. NOIP模拟赛csy2021/10/30

    NOIP模拟赛csy2021/10/30 比赛时间规划 赛后反思与总结 这..总的来说感觉打的很不好,根本没有状态,有一部分原因是今天来晚了,太慌,更多的还是这次题感觉很难o(╥﹏╥)o 比赛时间规划 ...

  5. 【HHHOJ】NOIP模拟赛 捌 解题报告

    点此进入比赛 得分: \(30+30+70=130\)(弱爆了) 排名: \(Rank\ 22\) \(Rating\):\(-31\) \(T1\):[HHHOJ260]「NOIP模拟赛 捌」Dig ...

  6. 辣鸡(ljh) NOIP模拟赛 模拟 平面几何 数论 化学相关(雾)

    [题目描述] 辣鸡ljhNOI之后就退役了,然后就滚去学文化课了. 然而在上化学课的时候,数学和化学都不好的ljh却被一道简单题难住了,受到了大佬的嘲笑. 题目描述是这样的:在一个二维平面上有一层水分 ...

  7. NOI.AC NOIP模拟赛 第六场 游记

    NOI.AC NOIP模拟赛 第六场 游记 queen 题目大意: 在一个\(n\times n(n\le10^5)\)的棋盘上,放有\(m(m\le10^5)\)个皇后,其中每一个皇后都可以向上.下 ...

  8. 【noip模拟赛4】Matrix67的派对 暴力dfs

    [noip模拟赛4]Matrix67的派对 描述 Matrix67发现身高接近的人似乎更合得来.Matrix67举办的派对共有N(1<=N<=10)个人参加,Matrix67需要把他们安排 ...

  9. 2021年10月8日模拟赛(保龄奇遇记)

    本场考试考的很撇,值得反思,暴露出很多问题,望及时的拨乱反正,改掉操之过急,心态不稳定的缺点 2021年10月8日模拟赛(保龄奇遇记) 太菜了 T1 话中有话 有些词是多义词.这就导致同一句话可能有多 ...

最新文章

  1. ERP系统管理员的工具箱 推荐几款优秀的数据比较同步工具 Data Compare and Sync tool...
  2. web中的cookie管理
  3. 微软宣布公开预览Dev Spaces for AKS
  4. 十一届蓝桥杯国赛 本质上升序列-dp
  5. ODPS2.0重装上阵,优化提升SQL语言表达能力
  6. 自适应灰色动态滚动网站404页面源码
  7. git指令如何葱master转到dev_看完这篇还不会用Git,那我就哭了
  8. 【react】 flux 的数据修改流程,类似与vuex那样,但是又有区别
  9. android selector 开始自定义样式
  10. C# VS2017使用AxWindowsMediaPlayer,解决打开软件后自动播放问题解决
  11. matlab色度椭圆,matlab画色度图
  12. PostgreSQL12.2_cn.chm 中文手册 最新版
  13. iOS 图片裁剪功能。
  14. 中间件 | 负载均衡策略
  15. python正则表达式:贪婪与非贪婪
  16. 如何把微信公众号平台做成找券机器人并自动回复优惠券
  17. 车规电阻AEC-Q200测试项目及元器件检测设备
  18. 提高计算机启动速度的是什么,三种方法让你实现电脑秒开!提升电脑开机速度就是这么简单!...
  19. C++华为+阿里+鹅厂面经大盘点-如果换做你能成功吗?
  20. Android 进阶——系统启动之Android进程造物者Zygote 进程启动详解(六)

热门文章

  1. js将docx转换为html,js 将word转换Html
  2. java用easyexcel实现读取excell表格内容
  3. Mybatis中resultMap使用
  4. java jdk 类加载机制_JDK源码阅读之类加载
  5. FileZilla搭建FTP服务器图解教程
  6. yii2 session mysql_Yii框架 session 数据库存储操作方法示例
  7. Android 第十一课 SQlite 数据库存储
  8. 竟然被尤雨溪点赞了:我给Vue生态贡献代码的这一年
  9. 微软悄悄发布了 Web 版的 VsCode
  10. 手把手教你接入前端热门抓包神器 - whistle