洛谷 P9344. 去年天气旧亭台
去年天气旧亭台
题目背景
依旧是过往的天气,过往的楼台烟雨。时间悄悄流逝着,山河仍在,人却已不是过去的人……
题目描述
登上楼台,旧时满面沉灰的地板映入眼帘。
共有
现在要清理这些地板上的灰尘。每次操作中,你可以:
+ 选择两个下标
+ 花费
求清理完所有地板上的灰尘至少要多少能量。
输入格式
本题有多组测试数据。
第一行一个整数
对于每组测试数据:
- 第一行一个整数
- 第二行
- 第三行
输出格式
对于每组测试数据,一行一个整数表示最小能量。
样例输入 #1
```
2
6
1 1 4 5 1 4
1 0 0 1 0 1
8
3 1 4 1 5 9 2 6
1 0 1 0 1 0 1 0
```
样例输出 #1
```
5
13
```
提示
【样例 1 解释】
- 对于第一组数据,直接花费
- 对于第二组数据,先花费
【数据规模与约定】
对于
对于
另有
对于
----------
(动态规划)
洛谷5月月赛第二题,怎么说呢,还是比较简单的
考虑
设
显然可以推出状态转移方程:
复杂度
考虑优化
将式子拆开
显然,
复杂度
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | #include <iostream> #include <cstring> using namespace std; typedef long long LL; //注意long long const int N = 2000010; const LL INF = 0xffffffffff; int n, c[N], a[N]; LL f[N]; int main() { int T; scanf ( "%d" , &T); while (T -- ) { scanf ( "%d" , &n); for ( int i = 1; i <= n; i ++ ) scanf ( "%d" , &a[i]); for ( int i = 1; i <= n; i ++ ) scanf ( "%d" , &c[i]); memset (f, 0x3f, sizeof f); f[0] = 0; LL min_v0 = INF, min_v1 = INF; //c_j + 1 = 0的最小值和c_j + 1 = 1的最小值 for ( int i = 1; i <= n; i ++ ) //DP { if (!c[i]) min_v0 = min(min_v0, f[i - 1] + a[i]); else min_v1 = min(min_v1, f[i - 1] + a[i]); f[i] = min(f[i], (c[i] ? min_v1 : min_v0) + a[i]); } printf ( "%lld\n" , f[n]); } return 0; } |
__EOF__

本文作者:xyy's blog
本文链接:https://www.cnblogs.com/xyy-yyds/p/17418449.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
本文链接:https://www.cnblogs.com/xyy-yyds/p/17418449.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示