0708hgoi

由于前两题都很简单,就简单写下思路。
1.一个人往下走与一个人往上走碰到之后改变方向,就相当于两人继续往前走。于是我们就可以将箱子平均分配给每个人。多余的箱子分给完成任务最早的人。这样就可以轻松求得答案了。
2.o(nlogn)的算法就是将圆拉成一条直线,并将它倍长。从1到n点往后n个点中进行二分,由此可以得出答案。
o(n)的算法就是从起点开始,有两个标记,一个左标记,一个右标记。在总值小于周长的一半时右标记加加,反之左标记加加。这样做也要将圆拉成直线并倍长。

这道题是好题

第三题是省选题,比较难想
3.首先我们看到题目会发现数据很小,但用深搜又不行,于是就可以想到应该用dp。(本蒟蒻想不出来,是某徐大班长想出来的)然而怎么dp呢?如果一幅图中有一条到达终点的最短路而另一幅图中有不一样的一条最短路(两个障碍不同)。我们将这两幅图合并,障碍全部叠加在第三幅图中得出最终最短路。最终最短路同样可以在第一幅和第二幅图中走。这样我们就可以用区间dp,以天数长度为区间,就可以完美dp。我们提前处理好两两时间之内所有的叠加障碍最短路。在在之后用区间dp。
这里预处理我用的是floyd因为好打,而dp用的是二维的。
dp[i][j]表示从i到j时间中从起点到终点最短路之和。
dp[i][j]=min(dp[i][j],dp[i][k]+dp[k][j]+kk)(kk是换路代价)
这里dp[i][j]要提前处理好dp(赋好初值)
优秀算法还有spfa来求最短路
一维数组dp

# P8482 「HGOI-1」Number ## 题目背景 $\text{bh1234666}$ 正在学习乘法! ## 题目描述 $\text{bh1234666}$ 有一定数量的数字 $0 \sim 9$,现在他想让你寻找一种分配方案,将它们分成两个整数,使得他们的乘积 $p$ 最大。 由于 $\text{bh1234666}$ 不喜欢太大的数,所以你只需要输出**两个非负整数**,使它们的乘积**等于**最大乘积 $p$,但是这两个整数 $0 \sim 9$ 的数量不能等于给定的数量(任意一个数字数量不相等即可,**不考虑前导零**)。 $\text{bh1234666}$ 是很善良的,如果 $0 \sim 9$ 的数量等于给定的数量了,你依旧可以得到的一半的分。 ## 输入格式 第一行十个整数 $c_0,c_1,\cdots c_9$,分别表示 $0 \sim 9$ 的个数。 ## 输出格式 共两行每行一个非负整数,分别表示你给出的两个非负整数。 ## 输入输出样例 #1 ### 输入 #1 ``` 1 2 3 2 1 1 2 1 2 1 ``` ### 输出 #1 ``` 13949030 620572547 ``` ## 说明/提示 #### 样例解释 最大可能乘积为 $97643210 \times 88653221=13949030 \times 620572547=8656385075279410$。 若输出 $97643210 \times 88653221$ 则只能得到一半的分,因为 $0\sim 9$ 出现的次数与给定的相同。 #### 数据范围及约定 本题采用**捆绑测试**,共有 $5$ 个 $\text{subtask}$,最终分数为所有 $\text{subtask}$ 分数之和。 $$ \def\arraystretch{1.5} \begin{array}{|c|c|c|}\hline \textbf{Task} & \textbf{Score} & \sum c_i\le \cr\hline 1 & 10 & 20 \cr\hline 2 & 20 & 100 \cr\hline 3 & 20 & 5000 \cr\hline 4 & 20 & 10^6 \cr\hline 5 & 30 & 10^7 \cr\hline \end{array} $$ 对于 $100\%$ 的数据,保证 $1 \le c_i$,$\sum c_i \le 10^7$。 #### 说明 本题有 $\text{spj}$,两数乘积正确得一半的分,数量与给出的不同且乘积正确得全部分数。故每一 $\text{subtask}$ 的得分为其中所有数据点得分的**最小值**。
07-09
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值