马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 zhangjinxuan 于 2023-6-6 08:57 编辑
上一关传送门:第一关 脱离地球的障碍
第二关 修复破损的宇航服
终于,你们在最后的 10-114514 毫秒拯救了 zhangjinxuan,并把他拉回了梦想星际舰。
但是,你们发现,zhangjinxuan 虽然只是受了点伤,宇航服却破损的十分严重。
如果不修复,那么 zhangjinxuan 以后就无法执行出舱任务,为了之后的任务顺利进行,你能帮助 zhangjinxuan 修复破损的宇航服吗?
宇航服是一个由 0 和 1 组成的一个字符串,就像这样:
001010011110100101100011111
你现在得使用电脑打字的方式来修复这个宇航服,即打出这个宇航服对应的 01 串即可,越快越好!
这台电脑上有三个按键,分别是 0, Shift, 和 1 Lock,一开始, 1 Lock 为未激活的,你可以执行以下操作:
1. 使用 X 微秒时间按下 0 键,如果 1 Lock 是激活状态,那么就会打印 1,否则只会打印 0;
2. 使用 Y 微秒时间按下 Shift + 1 键,如果 1 Lock 是激活状态,那么屏幕上打印 0,否则只会打印 1;
3. 使用 Z 微秒时间按下 1 Lock 键,1 Lock 的激活状态取反,请注意,这不会打印任何字符。
这是不是很像 Caps Lock 和 Shift 的规则?好了,就是这个规则,现给定 X, Y, Z 和修复宇航服要打印的 01 串 S,请输出修复宇航服的最短用时(微妙)。
Sample 1
Input
Output
Explain
以下操作序列使屏幕上的字符串等于中的 1101,用时9毫秒,这是最短的可能。
花费 Z(=3)毫秒按下 1 Lock 键。1 Lock 激活。
花费 X(=1)毫秒按下“0”键,打印 1。
花费 X(=1)毫秒来按下“0”键,打印 1。
花费 Y(=3)毫秒,以同时按下Shift键和“0”键,打印 0,因为 1 Lock 成激活状态,Shift 让 1 Lock 暂时成为未激活状态。
花费 X(=1)毫秒来按下“0”键。打印 1。
Input
1 2 4
001010011110100101100011111
Output
好了,现在请你编写解决这个问题的程序,请尽快完成任务!
本题非原创,改编于:https://atcoder.jp/contests/abc303/tasks/abc303_d。
本题尚未加入梦想 OJ。
参考答案
[/hide]
选手答案
暂无,允许使用 gpt,但是必须注明思路。
下一关:第三关 运输物资
本帖最后由 sfqxx 于 2023-6-3 13:35 编辑
x, y, z = map(int, input().split())
s = input()
INF = (1 << 60)#2^60
dp = [[INF for i in range(2)] for j in range(len(s) + 1)]
dp[0][0] = 0
dp[0][1] = z
for i in range(len(s)):
if s[i] == '1':
dp[i + 1][0] = min(dp[i][0] + y, dp[i][1] + z + y)#直接看帖子题解
dp[i + 1][1] = min(dp[i][0] + z + x, dp[i][1] + x)
else:
dp[i + 1][0] = min(dp[i][0] + x, dp[i][1] + z + x)
dp[i + 1][1] = min(dp[i][0] + z + y, dp[i][1] + y)
print(min(dp[len(s)][0], dp[len(s)][1]))
思路:
|