E. Rudolf and k Bridges
这道题需要使用到deque
deque:双端队列,可以在前后存取元素。
题目要求连续造k座桥,那么只需要把每一座桥的建造成本记录一下,最后取其中和最小的连续k座桥的成本即可。
对于每一座桥计算他的建造成本:
用dp来做,这座桥的第j个位置的建造成本为dp[j];
dp[j]=dp[k]+a[i][j]+1;其中k是一个范围[j-k-1,j-1];
最后就是一个前缀和来求连续k座桥的成本了。
#include<iostream>
#include<deque>
#include<vector>
#define int long long
using namespace std;
void solve(){
int n,m,k,d;
cin>>n>>m>>k>>d;
int a[n+2][m+2];
for