hdu5693 D gamehdu 5712 D++ game

题目链接:5693

题目链接:5712

对于这个D game。注意消除之后两遍的序列是可以拼合到一起的!我们可以想到有区间DP的做法。我们设\(f[i][j]\)表示区间i,j可以被消除。

显然如果这个区间可以被消除,则操作一定可以被分解成一次消除两个k1次,一次消除三个k2次。所以我们只考虑消除两个和消除三个的情况即可。

开始可以把公差放进set里面,方便之后查询。

具体转移见代码。

处理完哪些区间可以被消除之后,我们可以利用贪心来计算最大消除的数量。(要先把可行区间放入到一个vector里面,然后排序,按照长度为第一关键字,左端点为第二关键字。因为大区间一定覆盖它里面的小区间,所以我们只要遇到自己区间已经被计算过了就不用计算这整个区间了)。

代码如下:

#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<set>
#include<vector>
#define MAXN 310
using namespace std;
int t,n,m,cur,ans;
struct Edge{int l,r,dis;};
int a[MAXN],f[MAXN][MAXN],done[MAXN],dp[MAXN];
set<int>s;
vector<Edge>v;
inline bool cmp(struct Edge x,struct Edge y)
{   if(x.dis==y.dis) return x.l<y.l;return x.dis>y.dis;
}
int main()
{#ifndef ONLINE_JUDGEfreopen("ce.in","r",stdin);#endifscanf("%d",&t);while(t--){ans=0;s.clear();v.clear();memset(f,0,sizeof(f));memset(done,0,sizeof(done));scanf("%d%d",&n,&m);for(int i=1;i<=n;i++) scanf("%d",&a[i]),f[i][i-1]=1;for(int i=1;i<=m;i++) scanf("%d",&cur),s.insert(cur);for(int i=1;i<=n;i++){for(int l=1;l+i<=n;l++){int r=l+i;//printf("l=%d r=%d\n",l,r);if(f[l+1][r-1]&&s.count(a[r]-a[l])) f[l][r]=1;if(!f[l][r]){for(int k=l+1;k<=r-1;k++){int cha1=a[r]-a[k],cha2=a[k]-a[l];if((f[l][k-1]&&f[k][r])||(f[l+1][k-1]&&f[k+1][r-1]&&cha1==cha2&&s.count(cha1))){f[l][r]=1;break;}}}}}for(int i=1;i<=n-1;i++)for(int j=i+1;j<=n;j++)if(f[i][j])v.push_back((Edge){i,j,j-i+1});sort(v.begin(),v.end(),cmp);int cur=0;for(int i=0;i<v.size();i++){bool flag=true;for(int j=v[i].l;j<=v[i].r;j++)if(done[j]==1){flag=false;break;}if(flag==false) continue;for(int j=v[i].l;j<=v[i].r;j++)done[j]=1;}for(int i=1;i<=n;i++) if(done[i]) ans++;printf("%d\n",ans);}return 0;
}

然后对于那个加强版。
我想的是因为它的公差的种类数量很少,所以我想的是直接记录一下哪个区间里面有多少种公差,那么就知道了消除这个区间至少需要多少次。但是这样的话没有办法判断一次消除到底有没有满足消除数量在min,max范围内。。。。

所以说这个题我还木有A掉。。。。但是在网上也没有找到题解。。。。就先把自己WA的代码放在这里好了。。。

#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<set>
#include<vector>
#include<map>
#define MAXN 100
using namespace std;
int t,n,m,cur,ans,minn,maxx,cnt,kkk;
struct Edge{int l,r,dis;};
struct Node{int sum[40];}node[MAXN][MAXN];
int a[MAXN],f[MAXN][MAXN],done[MAXN],dp[MAXN];
set<int>s;
vector<Edge>v;
map<int,int>id;
inline bool cmp(struct Edge x,struct Edge y)
{   if(x.dis==y.dis) return x.l<y.l;return x.dis>y.dis;
}
int main()
{#ifndef ONLINE_JUDGEfreopen("ce.in","r",stdin);#endifscanf("%d",&t);while(t--){kkk++;ans=cnt=0;s.clear();v.clear();memset(f,0,sizeof(f));memset(done,0,sizeof(done));scanf("%d%d%d%d",&n,&m,&minn,&maxx);for(int i=1;i<=n;i++) scanf("%d",&a[i]);for(int i=1;i<=m;i++) scanf("%d",&cur),s.insert(cur),id[cur]=i;for(int i=1;i<=n;i++) {f[i][i-1]=1;if(s.count(a[i+1]-a[i]))node[i][i-1].sum[id[a[i+1]-a[i]]]=1;}for(int i=1;i<=n;i++){for(int l=1;l+i<=n;l++){int r=l+i;if(f[l+1][r-1]&&s.count(a[r]-a[l])&&a[r]!=a[r-1]&&a[l]!=a[l+1]) {   f[l][r]=1;for(int k=1;k<=32;k++) node[l][r].sum[k]=node[l+1][r-1].sum[k];node[l][r].sum[id[a[r]-a[l]]]=1;}vector<int>put,cur_ans;if(!f[l][r]){for(int k=l+1;k<=r-1;k++){int cha1=a[r]-a[k],cha2=a[k]-a[l];if(f[l][k-1]&&f[k][r]&&a[k]!=a[k-1]){f[l][r]=1;put.clear();for(int p=1;p<=32;p++)if(node[l][k-1].sum[p]||node[k][r].sum[p])put.push_back(p);if(cur_ans.size()==0)for(int q=0;q<put.size();q++)cur_ans.push_back(put[q]);if(cur_ans.size()!=0&&put.size()<cur_ans.size()){cur_ans.clear();for(int q=0;q<put.size();q++)cur_ans.push_back(put[q]);}}if(f[l+1][k-1]&&f[k+1][r-1]&&cha1==cha2&&s.count(cha1)){if(a[l]==a[l+1]||a[k-1]==a[k]||a[k]==a[k+1]||a[r-1]==a[r]) continue;f[l][r]=1;put.clear();for(int p=1;p<=32;p++)if(node[l+1][k-1].sum[p]||node[k+1][r-1].sum[p]||p==id[cha1])put.push_back(p);if(cur_ans.size()==0)for(int q=0;q<put.size();q++)cur_ans.push_back(put[q]);if(cur_ans.size()!=0&&put.size()<cur_ans.size()){cur_ans.clear();for(int q=0;q<put.size();q++)cur_ans.push_back(put[q]);}}}}if(f[l][r])for(int k=0;k<cur_ans.size();k++) node[l][r].sum[cur_ans[k]]=1;}}for(int i=1;i<=n-1;i++)for(int j=i+1;j<=n;j++)if(f[i][j])v.push_back((Edge){i,j,j-i+1});sort(v.begin(),v.end(),cmp);int cnt=0;for(int i=0;i<v.size();i++){if(v[i].dis<minn) continue;//int k1=v[i].dis/minn;//if((maxx-minn)*k<v[i].dis-k*minn) continue;int k=v[i].dis/maxx+(v[i].dis%maxx==0?0:1);if((v[i].dis%maxx!=0)&&(v[i].dis%maxx+(k-1)*(maxx-minn)<minn)) continue;bool flag=true;for(int j=v[i].l;j<=v[i].r;j++)if(done[j]==1){flag=false;break;}if(flag==false) continue;for(int j=v[i].l;j<=v[i].r;j++)done[j]=1;for(int j=1;j<=32;j++)if(node[v[i].l][v[i].r].sum[j])cnt++;}for(int i=1;i<=n;i++) if(done[i]) ans++;printf("Case #%d:\n%d %d\n",kkk,ans,cnt);}return 0;
}

转载于:https://www.cnblogs.com/fengxunling/p/10351015.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/484224.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机网络(十七)-局域网

一.局域网 1.1 简称LAN&#xff0c;是指在某一区域内由多台计算机互联成的计算机组&#xff0c;使用广播信道。 1.2 特点 覆盖的地理范围较小&#xff0c;只在一个相对独立的局部范围内联。使用专门铺设的传介质进行联网&#xff0c;数据传输速率高。通信延迟时间短&#xf…

最让青年科学家们困惑的 10 个问题,是什么?

来源&#xff1a;腾讯研究院8 月 1 日&#xff0c;首届“青年科学家 50 论坛”在南方科技大学隆重拉开帷幕&#xff0c;由 100 位“科学探索奖”获奖人发起并投票选出的“十大科学技术问题”&#xff0c;在开幕式中重磅发布。这些问题体现了中国顶尖青年科学家们最前沿的科学探…

Mybatis学习笔记13 - 动态sql之set标签

示例代码&#xff1a; 接口定义&#xff1a; package com.mybatis.dao;import com.mybatis.bean.Employee;public interface EmployeeMapper {public void updateEmp(Employee employee);public void updateEmployee(Employee employee); }mapper定义&#xff1a; <?xml ve…

国内整车厂“造芯”还缺什么?

来源&#xff1a;Imagination Tech2020年下半年以来&#xff0c;汽车行业的“缺芯”问题就一直困扰着全球各大车厂&#xff0c;福特、通用、丰田、现代、沃尔沃等一众车厂相继出现部分工厂或车型停产的情况&#xff0c;而国内也有南北大众和蔚来等车厂受到影响&#xff0c;出现…

set用法

begin()–返回指向第一个元素的迭代器 clear()–清除所有元素 count()–返回某个值元素的个数 empty()–如果集合为空&#xff0c;返回true end()–返回指向最后一个元素的迭代器 equal_range()–返回集合中与给定值相等的上下限的两个迭代器 erase()–删除集合中的元素 …

hadoop单机配置(非分布式)

1.1 环境 使用deepin系统、Hadoop3.1.3和Java环境jdk-8u162-linux-x64.tar.gz。 https://pan.baidu.com/s/1K1U1dypbgJeFvjHIGPcMqQ 提取码: 2vsi 1.2 准备 1.创建用户hadoop&#xff0c;按ctrlaltt打开终端&#xff0c;输入如下命令,并使用/bin/bash作为shell。 $ sudo use…

AlphaFold2爆火背后,人类为什么要死磕蛋白质?

来源&#xff1a; 脑极体近期在生命科学领域&#xff0c;有一则爆炸性的新闻&#xff0c;DeepMind 的Al phaFold2模型&#xff0c;将人类的98.5%的蛋白质&#xff0c;全部预测了一遍&#xff0c;并且做成了数据集免费开源&#xff0c;供科研圈的人使用。开放的数据集不仅包括人…

hadoop伪分布式配置

1.1 准备 通过gedit编辑器修改比较方便&#xff0c;因此需先安装gedit。 sudo apt-get install gedit1.2 修改配置文件core-site.xml和hdfs-site.xml(如下注释部分需要删除) gedit打开core-site.xml $ gedit ./etc/hadoop/core-site.xml<configuration>#在该语句对中添…

实现AGI,强化学习就够了?Sutton、Silver师徒联手:奖励机制足够实现各种目标...

来源&#xff1a;机器学习研究组订阅通用人工智能&#xff0c;用强化学习的奖励机制就能实现吗&#xff1f;几十年来&#xff0c;在人工智能领域&#xff0c;计算机科学家设计并开发了各种复杂的机制和技术&#xff0c;以复现视觉、语言、推理、运动技能等智能能力。尽管这些努…

内网渗透闲谈

作者&#xff1a;天析 为什么要进行内网渗透&#xff1f; 场景一&#xff08;企业内网&#xff09;&#xff1a; 在做渗透测试时&#xff0c;发现web服务是通过处于域中的服务器经由路由完成端口映射来对外提供的&#xff0c;而此时我们已经通过web环境获得了该主机的system权限…

这可能是十年来最酷的神经科学发现

© Designer Shit Documentary来源&#xff1a;Diego Salinas翻译&#xff1a;Rachel校对&#xff1a;Yord原文&#xff1a;medium.com/artificial-intelligence-and-cognition/what-makes-emotions-feel-good-or-bad-9bdcd0a81afc过去的十年是神经科学史上极不平凡的十年&…

计算机网络(二十一)-数据链路层设备

1.1 物理层扩展以太网 扩展添加了主干集线器&#xff0c;信道的冲突概率增大&#xff0c;冲突域增加&#xff0c;效率降低。 1.2 链路层扩展以太网 可以通过网桥和交换机来实现。 网桥&#xff1a;根据MAC帧的目的地址对帧进行转发和过滤。当网桥接收到一个帧时&#xff0…

LeetCode 876 Middle of the Linked List 解题报告

题目要求 Given a non-empty, singly linked list with head node head, return a middle node of linked list. If there are two middle nodes, return the second middle node. 题目分析及思路 题目给出一个非空单链表&#xff0c;要求返回链表单的中间结点。可以将链表中的…

计算机网络(十八)-以太网

一.概述 1.1 以太网指的是由Xerox公司创建并由Xerox、Intel和DEC公司联合开发的基带总线局域网规范&#xff0c;是当今现有局域网采用的最通用的通信协议标准。以太网络使用CSMA/CD技术。 1.2 以太网在局域网各种技术中占统治性地位。 造价低;是应用最广泛的局域网技术。比令…

Cell颠覆性发现:中脑神经元的新作用

来源&#xff1a;生物通除了颠覆长期以来关于中脑运动区域作用的观点&#xff0c;这项研究还可能缓解对药物无效的帕金森病患者的姿势和步态问题具有启示意义。中脑运动区是中脑的一部分&#xff0c;参与调节许多动物的行走和其他形式的运动。但是大脑这一区域神经元的功能仍然…

nginx 高并发优化参数

关于内核参数的优化&#xff1a;net.ipv4.tcp_max_tw_buckets 6000timewait的数量&#xff0c;默认是180000。net.ipv4.ip_local_port_range 1024 65000允许系统打开的端口范围。net.ipv4.tcp_tw_recycle 1启用timewait快速回收。net.ipv4.tcp_tw_reuse 1开启重用。允许将T…

计算机网络(十九)-IEEE802.11无线局域网

IEEE802.11是无线局域网的通用的标准&#xff0c;它是由IEEE所定义的无线网络通信的标准。 802.11的MAC帧头格式 3.无线局域网分类 有固定基础设施无线局域网 wifi名称其实就是服务集标识符。无固定基础设施无线局域网的自组织网络

谷歌用量子计算机造出「时间晶体」,挑战热力学第二定律

来源&#xff1a;新智元近日&#xff0c;谷歌联合几十位物理学家&#xff0c;用量子计算机造出了「时间晶体」。你能想象得到&#xff0c;有这样一个物体&#xff0c;竟然跳出了经典的热力学第二定律&#xff1f;没错&#xff0c;这就是「时间晶体」。然而&#xff0c;时间晶体…

7、JPA-映射-双向一对多

一个用户对应多个订单&#xff0c;多个订单对应一个用户&#xff0c;不管查哪一边都可以得到另一边的信息 实体类 Customer package com.jpa.yingshe;import javax.persistence.*; import java.util.HashSet; import java.util.Set;Table(name "JPA_CUTOMERS") Enti…

计算机网络(二十)-广域网-PPP协议和HDLC协议

一.广域网 广域网&#xff0c;通常跨接很大的物理范围&#xff0c;所覆盖的范围从几十公里到几千公里&#xff0c;它能连接多个城市或国家&#xff0c;远距离通信&#xff0c;形成国际性的远程网络。 广域网的通信子网主要使用分组交换技术。广域网的通信子网可以利用分组交换…