首页 > 其他分享 >P2719 分队问题 - oiClass

P2719 分队问题 - oiClass

时间:2024-02-26 13:48:16浏览次数:24  
标签:1000010 last int oiClass mid 分队 队伍 P2719 dp

题意简化

求一种分配方案:

  1. 最大化队伍总数;
  2. 在满足 1 的情况下最小化最多人的队伍人数。

题目思路

由于本题目的数据量高达 \(10^6\),且贪心算法也许不成立,所以需要考虑 \(n\log n\) 的算法!

具体的,对于一个人的需求 \(a_i\),如果小于 \(a_i\) 的数先被选走,那么 \(a_i\) 可能问题:

不存在人数为 \(a_i\) 的团队(答案并非最优)

证明:

3
1
2
3
1 3

那么,由于上述原因,要使得存在 \(n\log n\) 算法就务必需要满足无后效性。

故以使用动态规划与二分答案解答。

我们首先应该对 \(a_i\) 排序,以消除后效性!

由于 1 是必要条件,所以通过动态规划队伍总量的最大值,然后使用二分找到最小的队伍人数;

那么动态转移方程成了必不可缺的内容!

动态转移方程:

对于每个 \(a_i\) 有两种可能:

  1. 被选;
  2. 选择。

如果是被选

则代表 \(a_i\) 处于队伍中间,则 \(a_i\) 团队的起始人任然不变,即 \(last[i]=last[i-1]\);

如果是选择

则代表自己是对于开头,即 \(last[i]=i\),并更新 DP 数组的答案。

此题方程定义参考沈子扬同学的定义。

当然,这样定义不便于代码的撰写,于是我们将操作 2 提前一位,即在原选择的情况下自己是团队的最后一位!

思路结。

HACK 补充:

10
3 3 3 3 3 4 4 4 4 4
2 5
6
1 1 3 3 3 3
3 4

From Discuss!

AC Code:

#include<bits/stdc++.h>
using namespace std;
int n,a[1000010],dp[1000010],last[1000010];
int work(int mid)
{
	memset(dp,-1,sizeof(dp));
	memset(last,0,sizeof(last));
	dp[0]=0;
	for(int i=1;i<=n;i++)
	{
		if(a[i]<=i && dp[last[i-a[i]]]>=0 && last[i-a[i]]+mid>=i)dp[i]=dp[last[i-a[i]]]+1;
		if(dp[i]>=dp[last[i-1]])last[i]=i;
		else last[i]=last[i-1];
	}
	return dp[n];
}
int main()
{
	scanf("%d",&n);
	for(int i=1;i<=n;i++)scanf("%d",&a[i]);
	sort(a+1,a+n+1);
	int l=0,r=n+1,num=work(n);
	while(r-l>1)
	{
		int mid=l+(r-l)/2;
		if(work(mid)==num)r=mid;
		else l=mid;
	}
	printf("%d %d",num,r);
	return 0;
}

标签:1000010,last,int,oiClass,mid,分队,队伍,P2719,dp
From: https://www.cnblogs.com/cheerimy/p/18034147

相关文章

  • 【玄铁杯第三届RISC-V应用创新大赛】LicheePi 4A+建材识别装置+CUG汪汪小分队+问题记
    【玄铁杯第三届RISC-V应用创新大赛】LicheePi4A+建材识别装置+CUG汪汪小分队+opencv问题记录一、开发板环境搭建1.1开发板外观图1开发板带铝合金外壳外部图图2开发板带铝合金外壳内部图在yolox模型部署好后,在虚拟环境中调用opencv的imshow等图形化操作会报下面错误:1.2......
  • 守护生态小分队——云开发组 三等奖
    江西理工大学 守护生态小分队荣获2022年第五届“航天宏图&华为云杯”PIE软件开发者大赛云开发组三等奖 作品名称:基于PIE平台的全国生态功能保护区植被遥感监测系......
  • 哨兵二号生产小分队作品介绍——遥感应用组 一等奖
    南京工业大学 哨兵二号生产小分队荣获2022年第五届“航天宏图&华为云杯” PIE软件开发者大赛遥感应用组一等奖 作品名称:基于多源卫星遥感的干旱区农作物耗水精细......
  • 青少年CTFmisc-光头强小分队2
    按顺序解题根据提示反转逆序使用脚本补全文件头然后拉高得到key打开2根据提示猜测工具使用steghide解出文件文件里是pdu加密解密得到信息百度搜索得到......
  • 光头强小分队2
    ​ 一个题的key,似乎是某种加密$=~[];$={___:++$,$$$$:(![]+"")[$],__$:++$,$_$_:(![]+"")[$],_$_:++$,$_$$:({}+"")[$],$$_$:($[$]+"")[$],_$$:++$,$$$_:(!""+"")[$],$......
  • 光头强小分队2
    一个题的key,似乎是某种加密 $=~[];$={___:++$,$$$$:(![]+"")[$],__$:++$,$_$_:(![]+"")[$],_$_:++$,$_$$:({}+"")[$],$$_$:($[$]+"")[$],_$$:++$,$$$_:(!""+"")[$],$__:......
  • 青少年CTFmisc光头强小分队1wp
    逆序base64然后再转图片得到666的密码666的属性有base64Base64一直解得到密码解压key.zip得到key.wav一段是手机拨号一段是转图片使用手机上的Robot36然后再用两边的拨......
  • 2021年 西南石油大学超算与并行计算团队南充校区分队 第二届招新赛题解
      2021年SWPU(南充)超算团队招新赛总体难度并不是很大,大部分题目考察的是基本的编程能力,题目中涉及到了一些并行计算相关的名词和知识,选手在参加比赛的同时,既能够展示......