【CFGym102059G】Fascination Street(思维DP)
大致题意: 有\(n\)个路灯,每个路灯有一定的建造费用,且建成后可照亮自身及周围距离为\(1\)的两个格子。你可以交换\(k\)次两个路灯的建造费用,求照亮所有格子的最小费用。
题意转换
首先可以发现交换显然是一个有后效性的操作,难以记录到状态中。
但是\(k\)这么小似乎别有深意?
考虑我们把一次交换分裂成两个操作,即在某一无需建路灯的位置额外建了一个路灯,和在某一需建路灯的位置免费建了一个路灯。
这样就容易\(DP\)了。
动态规划
考虑先把费用都向右移一位,再把第一个位置的费用设为\(INF\),这样一来,每个位置建路灯,就变成了影响包括其在内的前\(3\)个位置,这样就好处理多了。
我们设\(f_{i,j,t,0\sim3}\)表示当前在第\(i\)个位置,额外建了\(j\)个路灯,免费建了\(t\)个路灯,上一个路灯建在到\(i\)距离为\(0\sim3\)的位置时的最小花费。
则转移时就要根据第四维是否为\(0\)来分开处理了。
当第四维为\(0\)时,说明在当前位置建了一个路灯,则有两种情况:花钱建了一个或免费建了一个。
当第四维非\(0\)时,说明在当前位置没有建路灯,或者额外建了一个路灯。
具体实现可以详见代码。
代码
#include<bits/stdc++.h>
#define Tp template<typename Ty>
#define Ts template<typename Ty,typename... Ar>
#define Reg register
#define RI Reg int
#define Con const
#define CI Con int&
#define I inline
#define W while
#define N 250000
#define K 9
#define LL long long
#define Gmin(x,y) (x>(y)&&(x=(y)))
#define INF 1e18
using namespace std;
int n,k;LL a[N+5],f[N+5][K+1][K+1][4];
class FastIO
{
private:
#define FS 100000
#define tc() (A==B&&(B=(A=FI)+fread(FI,1,FS,stdin),A==B)?EOF:*A++)
#define tn (x<<3)+(x<<1)
#define D isdigit(c=tc())
char c,*A,*B,FI[FS];
public:
I FastIO() {A=B=FI;}
Tp I void read(Ty& x) {x=0;W(!D);W(x=tn+(c&15),D);}
Ts I void read(Ty& x,Ar&... y) {read(x),read(y...);}
}F;
int main()
{
RI i,j,t,w;LL ans=INF;for(F.read(n,k),i=1;i<=n;++i) F.read(a[i+1]);a[1]=INF;//读入,将花费右移一位
for(i=0;i<=k;++i) for(j=0;j<=k;++j) for(t=0;t<=3;++t) f[0][i][j][t]=INF;f[0][0][0][0]=0;//初始化
for(i=1;i<=n+1;++i) for(j=0;j<=k;++j) for(t=0;t<=k;++t)
{
for(w=1;w<=3;++w) f[i][j][t][w]=f[i-1][j][t][w-1];//不建路灯
f[i][j][t][0]=min(f[i][j][t][1],min(f[i][j][t][2],f[i][j][t][3]))+a[i],//花钱建路灯
t&&Gmin(f[i][j][t][0],min(f[i][j][t-1][1],min(f[i][j][t-1][2],f[i][j][t-1][3])));//免费建路灯
for(w=1;w<=3;++w) j&&Gmin(f[i][j][t][w],f[i-1][j-1][t][w-1]+a[i]);//额外建路灯
}
for(i=0;i<=k;++i) Gmin(ans,min(f[n][i][i][0],min(f[n+1][i][i][0],f[n+1][i][i][1])));//统计答案
return printf("%lld",ans),0;//输出答案
}
【CFGym102059G】Fascination Street(思维DP)的更多相关文章
- T2960 全民健身【思维Dp,预处理,差分优化】
Online Judge:YCJSOI Label:Dp,思维题,预处理,滚动优化 题目描述 乐乐现在掌管一个大公司,办公楼共有n层.为了增加员工的身体素质,他决定在每层楼都建立一个活动室,活动室分乒 ...
- 【做题】CSA49F - Card Collecting Game——思维&dp
原文链接 https://www.cnblogs.com/cly-none/p/CSA49F.html 题意:Alice和Bob在玩游戏.有\(n\)种卡牌,每种卡牌有\(b_i\)张,保证\(\su ...
- 牛客练习赛40 A 小D的剧场 (思维dp)
链接:https://ac.nowcoder.com/acm/contest/369/A 题目描述 若你摘得小的星星 你将得到小的幸福 若你摘得大的星星 你将得到大的财富 若两者都能摘得 你将得到 ...
- Codeforces Round #533 (Div. 2) C.思维dp D. 多源BFS
题目链接:https://codeforces.com/contest/1105 C. Ayoub and Lost Array 题目大意:一个长度为n的数组,数组的元素都在[L,R]之间,并且数组全 ...
- Queue CodeForces - 353D (思维dp)
https://codeforces.com/problemset/problem/353/D 大意:给定字符串, 每一秒, 若F在M的右侧, 则交换M与F, 求多少秒后F全在M左侧 $dp[i]$为 ...
- codeforce——思维dp
Codeforces 822C Hacker, pack your bags!(思维) 题目大意:给你n个旅券,上面有开始时间l,结束时间r,和花费cost,要求选择两张时间不相交的旅券时间长度相 ...
- atcoder 2017Code festival C ——D题 Yet Another Palindrome Partitioning(思维+dp)
题目大意: 把一个字符串s分割成m个串,这m个串满足至多有一种字符出现次数为奇数次,其他均为偶数次,问m的最小值 题解: 首先我们想一下纯暴力怎么做 显然是可以n^2暴力的,然后dp[i]表示分割到i ...
- 【bzoj4976】宝石镶嵌(思维dp)
题目传送门:bzoj4976 不得不说这是道脑洞dp,思路真的清奇. 我们可以发现,虽然n很大,但是k只有100,这里面似乎隐藏了什么玄机. 我们可以发现,设总共有$ tot $个二进制位在这n个数中 ...
- 【洛谷5292】[HNOI2019] 校园旅行(思维DP)
点此看题面 大致题意: 给你一张无向图,每个点权值为\(0\)或\(1\),多组询问两点之间是否存在一条回文路径. 暴力\(DP\) 首先,看到\(n\)如此之小(\(n\le5000\)),便容易想 ...
随机推荐
- jvm 性能调优工具之 jmap
概述 命令jmap是一个多功能的命令.它可以生成 java 程序的 dump 文件, 也可以查看堆内对象示例的统计信息.查看 ClassLoader 的信息以及 finalizer 队列. jmap ...
- Flink是如何实现exactly-once语义的
转自:https://blog.csdn.net/xianpanjia4616/article/details/86375224 最少一次:断了之后 重新执行 再去重 严格一次:根据检查点,再执行一次 ...
- STS 创建 Maven 项目填坑
用 STS 创建 Maven 项目并不复杂,只是其中有一些坑在里面,我在解决这些坑的时候发现很多人都遇到了相同的问题,因此把创建的步骤记录在这里.所有的步骤不外乎就是一些套路,并没有什么复杂的地方,只 ...
- (译)Kubernetes中的多容器Pod和Pod内容器间通信
原文:https://www.mirantis.com/blog/multi-container-pods-and-container-communication-in-kubernetes/Pave ...
- Spring集成Quartz框架的两种方式。
可参考:https://blog.csdn.net/yk614294861/article/details/84324603 1.使用Spring与Quarta配置作业得两种方式: a.方式一,Met ...
- 2019-11-25-如何在国内发布-UWP-应用
原文:2019-11-25-如何在国内发布-UWP-应用 title author date CreateTime categories 如何在国内发布 UWP 应用 lindexi 2019-11- ...
- ABP中文网的一些BUG
之前一些翻译了的文档没有及时更新.比如 IAsyncCrudAppService接口在很久之前的版本就已经改为了ICrudAppService,如果是在官网下载的最新实例中IAsyncCrudAppS ...
- 面试官:来谈谈限流-RateLimiter源码分析
RateLimiter有两个实现类:SmoothBursty和SmoothWarmingUp,其都是令牌桶算法的变种实现,区别在于SmoothBursty加令牌的速度是恒定的,而SmoothWarmi ...
- SPC软控件提供商NWA的产品在各行业的应用(石油天然气行业)
Northwest Analytical (NWA)是全球领先的“工业4.0”制造分析SPC软件控件提供商.产品(包含: NWA Quality Analyst , NWA Focus EMI 和 N ...
- BBR加速 Centos
BBR是什么 BBR 是 Google 提出的一种新型拥塞控制算法,可以使 Linux 服务器显著地提高吞吐量和减少 TCP 连接的延迟. BBR项目地址 https://github.com/goo ...