super oj p528
本题的正解为区间DP,可以拿到满分,转移方程如下:
F[i]=MIN{F[j]}+1
{S1[j+1][i]=0 or S2[j+1][i]=0 or ABS(S1[j+1][i]-S2[j+1][i])<=M}
部分DP:
for(i=1;i<=n;i++)for(j=1;j<=i;j++)if(abs(s1[j][i]-s2[j][i])<=m) || (s1[j][i]==0) || (s2[j][i]==0) //{满足条件}f[i]=min(f[i]f[j-1]+1); // {进行转移}
完整代码(正解):
#include<iostream>
#include<cstdio>
#include<cmath>
#include<ctime>
#include<cstring>
#include<string>
#include<algorithm>
#include<cstdlib>
#define N 1400000
using namespace std;int f[N],a[N],b[N];
int maxx=1e5+6;
int n,m;int main()
{freopen("lx.in","r",stdin);freopen("lx.out","w",stdout);scanf("%d%d",&n,&m); for(int i=1;i<=n;++i){int x;scanf("%d",&x);if(x==1){a[i]=a[i-1]+1;b[i]=b[i-1];}else{a[i]=a[i-1];b[i]=b[i-1]+1;}f[i]=maxx;for(int j=i;j>=1;--j){int s1=a[i]-a[j];int s2=b[i]-b[j];if(abs(s1-s2)<=m||s2==i-j+1||s1==i-j+1)f[i]=min(f[i],f[j-1]);}f[i]++;}cout<<f[n];return 0;
}
但是如果观察不到区间DP的性质,还可以采用贪心的思想。对每一个人求出到达他所在的位置是两个教授的粉丝数之差,每次计算时从第一个人进行枚举,记录下最后一个num[i]<=m的人的位置,将包括他在内的前面所有人归为一个教室,再重新计算一次num。
代码如下(60分):
#include<iostream>
#include<cstdio>
#include<cmath>
#include<ctime>
#include<cstring>
#include<string>
#include<algorithm>
#include<cstdlib>
#define N 1400000
using namespace std;int num[N],a[N],b[N];
bool check[N];
int n,m;
int pos;
int ans;void pre()
{for(int i=1;i<=n;++i){if(a[i]!=0&&b[i]!=0){if(a[i]-b[i]>=0)num[i]=a[i]-b[i];else num[i]=b[i]-a[i];}elsenum[i]=0;}
}void work()
{for(int i=1;i<=n;++i){if(num[i]<=m) pos=i;}for(int i=1;i<=n;++i){a[i]=a[i+pos]-a[pos];b[i]=b[i+pos]-b[pos];}n-=pos;ans+=1;pre();
}int main()
{freopen("orz.in","r",stdin);freopen("orz.out","w",stdout);scanf("%d%d",&n,&m);for(int i=1;i<=n;++i){int x;scanf("%d",&x);if(x==1){a[i]=a[i-1]+1;b[i]=b[i-1];}else{b[i]=b[i-1]+1;a[i]=a[i-1];}}pre();while(n!=0) work();cout<<ans;return 0;
}
这种思想可以装上指针,从后往前枚举,效率更高,而且可以得到70分。
super oj p528相关推荐
- super oj p52
1.电话号码要用string读入,否则会超时 2.按字典序排列答案时应该有2种方法 (1)把字符转化成为数字数组,直接用sort快排即可 (2)把数字借用trie数的思想(没试过) 3.'-'的处理可 ...
- HDU OJ Super Jumping! Jumping! Jumping!
Super Jumping! Jumping! Jumping! Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/32768K ...
- 杭电OJ分类题目(3)
原题出处:HDOJ Problem Index by Type,http://acm.hdu.edu.cn/typeclass.php 杭电OJ分类题目(3) HDU Computational Ge ...
- 【HDU No. 4417】 超级马里奥 Super Mario
[HDU No. 4417] 超级马里奥 Super Mario 杭电OJ 题目地址 [题意] 可怜的公主陷入困境,马里奥需要拯救他的情人.把通往城堡的道路视为一条线(长度为n ),在每个整数点i 上 ...
- super(Student,self).__init__()初始化的是什么东西?
继承不是为了继承里面原来的属性和值么,不初始化的话,会有什么问题? 2015-04-04源自:python进阶 5-17642 浏览2 回答 最佳回答 2015-05-05 1 super(Stude ...
- Google Pixel 超分辨率--Super Resolution Zoom
Google Pixel 超分辨率–Super Resolution Zoom Google 的Super Res Zoom技术,主要用于在zoom时增强画面细节以及提升在夜景下的效果. 文章的主要贡 ...
- 【译】为什么要写super(props)
译注: 原文地址 https://overreacted.io/why-do-we-write-super-props/ 正文 我听说Hooks是新的热点.好笑的是,我想通过描述一些关于class组件 ...
- java super快速生成_为什么当我使用编辑器代码生成器时,eclipse会在构造函数中自动添加一个java super()方法?...
正如@Kon在他的评论中提到的, Java中的一个空构造函数包含对超类构造函数的隐式调用. 此外,没有明确调用super()的非空构造函数将在顶部具有隐式调用. 离开super()调用是唯一的时候,如 ...
- java super是引用变量吗_Java中super的几种用法并与this的区别
1. 子类的构造函数如果要引用super的话,必须把super放在函数的首位. class Base { Base() { System.out.println("Base" ...
最新文章
- Tomcat(三):tomcat处理连接的详细过程
- 13.13通过代码创建数据库和表
- entity framework .core常用技巧
- Ruby on Rails: 使用devise+cancan+rolify建立完整的权限管理系
- 魅族Android10内测招募答案,10款机型升级Android 10!魅族Flyme即日起内测招募
- centos php 错误日志,centos系统下错误日志保存在哪里
- SQL Server中的T-SQL RegEx命令
- vue组件挂载到全局方法
- opencore 0.6.3 华硕_钜惠嗨翻双11,颜值优选华硕GT501白色狙击手机箱
- 小学计算机设备报表,小学信息技术教育及电教设备自查报告
- SEO常用的数据名词解释
- 支付宝app登录授权的infoStr授权登录流程
- Adobe Illustrator地图设计插件mapublisher,AI制图?
- 【计算机体系结构】非线性流水线调度算法 C++ Python
- 大数据时代从繁乱冗杂中精准提取核心文本信息 × Python Tkinter 生成词云图
- ADS 2019 安装 仿真
- Web Spider 常见混淆EVAL、AA、JJ、JSFUCK
- 蚂蚁移动开发平台mPaaS:金融业务增长的新引擎
- 数学笔记23——部分分式
- JADE学习笔记4:Agent通信
热门文章
- flash spi 野火_SPI_FLASH做汉字字库芯片,测试成功
- 中国移动光猫怎么进网页服务器,中国移动光猫设置方法(192.168.1.1进不了光猫)...
- 秦皇岛达内传授零基础怎样学平面设计
- Android平板怎么截屏,ipad mini怎么截图 iPad/iPad mini截图技巧图解
- esp8266启动报错 ets Jan 8 2013,rst cause:2, boot mode:(7,7)
- 读书笔记-《把时间当朋友》-1
- 各大搜索引擎爬虫UA
- Unreal Engin_基础小技巧笔记
- 45 大事件项目 => [01] 后台管理项目ajax练习
- smtp java 抓包_[Wireshark]_003_电子邮件抓包分析