欢迎光临散文网 会员登陆 & 注册

AtCoder Beginner Contest 306(4/8)

2023-06-17 23:20 作者:Pinkword777  | 我要投稿

A.签到


把一个字符串翻倍,每个字符输出两次即可。

B.模拟


模拟二进制乘法,每次输入一个数(0或1),1就乘上当前2的次方,记录总和即可。(我开了unsigned long long)

C.模拟


从头到尾,按顺序输出出现正好两次的数即可。

D.DP


题意:

一个人从头到尾走完1~n格,每个格上有个吃的,有毒无毒,并且有一定美味度,他每走到一个格子上可以选择吃或不吃。

一个人有两个状态,健康不健康

健康状态下,吃完有毒的,会变得不健康。

不健康状态下,吃完有毒的会直接死掉,吃完没毒的会解毒变成健康的。


那么状态转移方程为:

0表示健康,1表示不健康)

食物无毒

f[i][0]=max({f[i-1][0]+a[i].second,f[i-1][1]+a[i].second,f[i-1][0]});

//健康只能从 健康+吃/不吃 或者 不健康+吃

f[i][1]=f[i-1][1];

//不健康只能从 不健康来

食物有毒

f[i][0]=f[i-1][0];

//健康只能从 健康来

f[i][1]=max(f[i-1][0]+a[i].second,f[i-1][1]);

//不健康只能从 健康+吃或者 不健康+不吃来

代码截图:


A.

A

B.

C.

D.

碎碎念:

E题没看懂题,跟队友一起打的,听他们说是树状数组,不太熟,题意也不太懂,然后就没看了

今天状态还不错

C题读假题浪费了十几分钟,可惜

总之放假前不会再经常打了,偶尔打打这种简单的还可以

AtCoder Beginner Contest 306(4/8)的评论 (共 条)

分享到微博请遵守国家法律