SDKD SingleTest A 题解 2015-04-03

来源:互联网 发布:linux arp老化 编辑:程序博客网 时间:2024/06/14 09:04

A:POJ2385  动态规划。题目告诉Bessie在T时间内可以往返W次以及每秒钟1、2哪棵树会落下苹果,根据题意可得递推公式 dp[i][j]=max(dp[i-1][j-1],dp[i-1][j]);其中i为当前时间 j为当前往返次数 如果j为偶数 当前在1树下 若此时1刚好落下苹果 则将当前值加1 j为奇数时同理 最后输出所得最大数目。

B:POJ2386 简单DFS。给出一张m行n列的图 w为水。为陆地 w可向八个方向连同 视为一个水塘 求水塘个数 。DFS求连通块数目即可。

C:POJ2387 动态规划 / 回溯。给出N土地数 T 土地之间路的条数 以及每条路所连接的两个地点 时间 求从N到1所需的最短时间。可以推出状态方程dis[j]=min(dis[j],dis[mark]+G[mark][j])求解。由于N最大为1000,若用回溯法,则需要进行特殊处理剪枝。用一个一维数组vis判断当前地点是否访问过的同时 保存到该点的最短时间,另用一个二维组存储路径方向的同时存储任意两点之间的最短时间(可能有多条道路连同这两点),回溯时 如果存在位置i使得road[pos][i]!=-1&&len+road[pos][i]<ans&&len+road[pos][i]<vis[i]则可以进行递归 如此便节省大量时间 成功剪枝。

D:

POJ

2389水题。给出一组数据 求中位数。

E:POJ2389大数乘法。并不需要模板。字符串读入数据 转化为int型逐位保存在两个数组中 分析可知ans[j+i]+=num1[i]*num2[j];将结果保存在ans中后 逐位处理 如果当前数大于等于10 则将该数取余 将下一位加上该位数/10 处理完后得到的结果是逆序的 去掉末尾的0 逆序输出 即可得到结果。

F:POJ2390 水题。给出年份利率本金 求所得的总数。


*G:POJ1988 并查集

*H:POJ1989 贪心+扫描

*I:POJ1990 树状数组

*J:POJ1991 贪心+动态规划

0 0