VIJOS 【颜色代表内容形式
】 题目 附件 算法 正文 注意 引用 说明 1000 A+B Problem 数学(
) 请Ctrl c+ctrl v program Plus; var a,b:longint; begin readln(a,b); w riteln(a+b); end
注意 :不是高精度加法 程序来自:VIJOS 1001 谁拿了最多奖学金 模拟 仔细点就行了
pas 1002 过河 解法1:动态规划 设 f[i]表示跳到 i 所能碰到的最少石子数,方程式很容易
f[i]=min{f[i-t],f[i-t+1]
f[i-s]}+i 上的石子数 因为题目中的 l 非常大,但石子数却非常少,在这种情况下我们会发现 f 数组有一大段一大段的值都是完全一样的,这时候多算下去也没有意义,设有一段 f[i-t]
f[i]完全相同,这时我们完全可以把它们移动到下一个石头的前面去,这样就能节省掉许多时间
实现中,我们可以用循环数组,方程式完全一样,只不过如果发现 i 前 t 个值全部一样时,就直接把 i 的坐标跳到下一个石子处
当 s=t 时我们的方法行不通,因为 f 数组中不会出现连续的相同值,这时可以特判,石子的坐标 mod s=0 的就会被踩到
注意:为了方便,循环数组可从 0 开始编号;最后一步没说一定要跳到 l;判断 f[i]到 f[i-t]是否相同时可加个优化:数组 g 记录以 i 结尾的连续相同的值有多少个,每次判断 g[i]是否大于 t 就行了,不过本题s,t 过小,效果并不明显
pas 解法2:动态规划 总体思想和解法1 相同,我们可以确定当两颗石子(包括终点和最后一颗石头的距离)的距离大于100 时,完全可以将其距离缩短为100(证明我还不会),但注意你把i 石子往前推时,i 后面的石子(包括终点l)也得