ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

8.2测试

2022-08-02 21:33:58  阅读:225  来源: 互联网

标签:ch ll while 8.2 测试 蓝蓝的 dp getchar


A.蓝蓝的棋盘

dp题
因为蓝蓝走过棋之后下一个人是先手,可以把问题简化为一个保证先手且不断减少的棋盘。
设计状态:dp[i]表示在第i位下,先后手最优策略下的差值,因为是先手减去后手,所以也是最大差值

从n到0倒序dp,设计转移方程为:dp[i]=max(a[y]-dp[y])\(i<y \leq i+m\)
可用单调队列来优化

AC Code
#include<bits/stdc++.h>
using namespace std;

#define ll long long

inline ll read()
{
	ll x=0,f=1;
	char ch=getchar();
	while(ch<'0'||ch>'9')
	{
		if(ch=='-')f=-1;
		ch=getchar();
	}
	while(ch>='0'&&ch<='9')
	{
		x=x*10+ch-'0';
		ch=getchar();
	}
	return x*f;
}

const int N=2e6+5;
ll n,m,a[N],dp[N],q[N];

int main()
{
	n=read(),m=read();
	for(int i=1;i<=n;i++)a[i]=read();
	int l=1,r=1;
	q[r]=n;
	for(int i=n-1;i>=0;i--)
	{
		while(l<r&&min(n,i+m)<q[l])l++;
		dp[i]=a[q[l]]-dp[q[l]];
		while(l<=r&&a[q[r]]-dp[q[r]]<a[i]-dp[i])r--;
		q[++r]=i;
	}
	cout<<dp[0]<<endl;
	return 0;
}

B.淘淘的集合

AC Code

C.蓝蓝的程序

标签:ch,ll,while,8.2,测试,蓝蓝的,dp,getchar
来源: https://www.cnblogs.com/mkik/p/16545235.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有