*CF1216F. Wi-Fi (dp)

题目链接:https://vjudge.net/problem/CodeForces-1216F
题意:给出n个房间,k表示wifi覆盖范围。然后给出一个字符串,0表示这个房间不可以装wifi,1表示这个房间可以装wifi。每个房间都可以进行装宽带,宽带费用为i,wifi费用也为i。
解题思路:
利用f数组保存每个点i之后最近的1的位置
dp[i]表示前i个房间都被网络覆盖的最小代价
遍历所有房间,每个房间的dp[i]对应有两种来源,第一种是这个房间直接装宽带dp[i]=dp[i-1]+i;
第二种是找到前面能够覆盖它的wifi,可以知道,在覆盖i的情况下,wifi越靠前费用越少,最小能够覆盖i的wifi位置为i-k,所有找出i-k之后最近的1的位置即可,为f[i-k],记为pre=f[max(i-k,1)],pre满足的条件必须是pre<=i+k才可以覆盖i点。在满足 条件后,转移方程就是dp[i]=min(dp[i],dp[pre-k]+pre);因为在pre点建立了wifi,所有pre-k到pre+k都能被覆盖,所以转移方程为pre-k点的最小代价+pre
最后,200000!应该会超int范围,记得用long long

#include<iostream>
#include<cstdio>
#include<string>
using namespace std;
#define ll long long 
int n,k;
char s[210000];
int f[210000];
ll dp[210000];
int main(){
	cin>>n>>k;
	scanf("%s",s+1);
	f[n+1]=3*n;
	for(int i=n;i>0;i--){
		f[i]=(s[i]=='1')?i:f[i+1];
	}
	dp[0]=0;
	for(int i=1;i<=n;i++){
		dp[i]=dp[i-1]+i;
		int pre=f[max(1,i-k)];
		if(pre<=i+k){
			dp[i]=min(dp[i],dp[max(pre-k,1)-1]+pre);
		}
	}
	printf("%lld\n",dp[n]);
	return 0;
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Content-Security-Policy: frame-src 'self' *.mozilla.net *.mozilla.org *.mozilla.com *.mozilla.org www.googletagmanager.com www.google-analytics.com www.youtube-nocookie.com trackertest.org www.surveygizmo.com accounts.firefox.com accounts.firefox.com.cn www.youtube.com; img-src 'self' *.mozilla.net *.mozilla.org *.mozilla.com *.mozilla.org data: mozilla.org www.googletagmanager.com www.google-analytics.com adservice.google.com adservice.google.de adservice.google.dk creativecommons.org cdn-3.convertexperiments.com logs.convertexperiments.com images.ctfassets.net; child-src 'self' *.mozilla.net *.mozilla.org *.mozilla.com *.mozilla.org www.googletagmanager.com www.google-analytics.com www.youtube-nocookie.com trackertest.org www.surveygizmo.com accounts.firefox.com accounts.firefox.com.cn www.youtube.com; style-src 'self' *.mozilla.net *.mozilla.org *.mozilla.com *.mozilla.org 'unsafe-inline' app.convert.com; script-src 'self' *.mozilla.net *.mozilla.org *.mozilla.com *.mozilla.org 'unsafe-inline' 'unsafe-eval' www.googletagmanager.com www.google-analytics.com tagmanager.google.com www.youtube.com s.ytimg.com cdn-3.convertexperiments.com app.convert.com data.track.convertexperiments.com 1003350.track.convertexperiments.com 1003343.track.convertexperiments.com; connect-src 'self' *.mozilla.net *.mozilla.org *.mozilla.com *.mozilla.org www.googletagmanager.com www.google-analytics.com region1.google-analytics.com logs.convertexperiments.com 1003350.metrics.convertexperiments.com 1003343.metrics.convertexperiments.com sentry.prod.mozaws.net o1069899.sentry.io o1069899.ingest.sentry.io https://accounts.firefox.com/ stage.cjms.nonprod.cloudops.mozgcp.net cjms.services.mozilla.com; font-src 'self'; default-src 'self' *.mozilla.net *.mozilla.org *.mozilla.com *.mozilla.org X-Clacks-Overhead: GNU Terry Pratchett Etag: "f2d65cb9e0a72b2e713c5f4e624ec2c1" X-Backend-Server: bedrock-75f4585775-g8pf7.gcp-us-west1 Strict-Transport-Security: max-age=31536000 X-Content-Type-Options: nosniff X-Xss-Protection: 1; mode=block Referrer-Policy: strict-origin-when-cross-origin Via: 1.1 google, 1.1 5d4ed4df24dee2cc4c8f561e8c090690.cloudfront.net (CloudFront) X-Cache: Miss from cloudfront X-Amz-Cf-Pop: SFO5-C1 X-Amz-Cf-Id: Yz8DuOFyPa9l63XgCBJwQlo9VYl2Ch9qG9ccVATJcR6ci3doX7QbHA==表示什么意思
06-03
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Buyi.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值