普转提Day1
T1
给定一个长度为N的序列,去掉其中连续的一部分使得剩下的部分没有重复元素。
很显然可以发现去掉的一部分只有三种情况:开头、中间、最后。
那么我们只需要枚举Hash就可以了。复杂度O(N^2).
不过这题也可以用O(N)的做法,类似一个双指针的做法就可以了。
T2
给出两个数N,M,求小于等于N的自然数内,M的倍数的个位数字之和。
数学题,求出循环节进行计算即可。
T3
将N个物品放进最大承重量为S的背包内,每个物品有一个规定的放入时间和拿出时间,且有它的重量、价值和该物品的承重量。在同一个时刻放入多个物品时可以按任意次序放入,物品可以选择不放入。求最大的价值。
对于每个物品的放入时间和拿出时间,仔细思考会发现有一个性质:将拿出时间为第一关键字非严格单调递增排序,放入时间为第二关键字非严格单调递减排序后,对于一个物品i就不用再去考虑i之前放入的物品,即i之前放入的物品都是合法的。
有了这个性质之后,很显然就可以dp了。设f[i][j]表示枚举到第i个物品时在这个物品上面的承载量不超过j时的最大价值,然后我们通过这个物品进出的时间段内的阶段对这个状态进行转移。
不妨设目前已经放好了前i-1个物品,那么对于第i个物品,我们要考虑有三个问题,一是从哪些状态转移,二是这个物品的承重,三是如何转移。 因为根据上述的性质,我们不用考虑i之后的状态会对i产生影响,所以我们只需通过i之前的状态转移而来。那么承重超了怎么办,我们设的状态就是第i个物品以上承重量不超过j的最大价值,而且一个个物品都是一个类栈的形式,当前枚举到的i一定是最外面的一层,而在i外面的物品还在后面的状态(可以由排序时的性质可得),通过这个思路我们也可以用递归来写,不过常数偏高。在转移的时候我们只枚举第i个物品进出的时间,用一个数组记录从这个i放入的时间起到当前枚举到的时间时的最大价值,那么当前状态就可以由这个价值加上从该时间起到拿出时间的状态(因为是栈的形式,所以这个物品时间内部的物品的状态一定已经被计算)。时间复杂度(N^2*S).

T4
给出n个数和m组数,每组数中又有ki个数。求将所有数or起来后为1的方案数,对1e9+7取模。比如说有三个数,有三组数分别为1,3、2,3、1,2.那么1,2和1,3与了之后1,2,3就都有了,是一种方案。同,2,3&1,2和1,3&2,3和1,2&1,3&2,3都是其中的一种方案,所以共有4中方案。
假设每一组数中都包含了每一个数,那么总方案就是2^m。但是其中存在有一个数没包含的情况,两个数没包含的情况,三个数没包含的情况……所以设cnt[i]表示i的方案数,根据容斥原理,答案应该是2^cnt(s)-2^cnt(s-1)+2^cnt(s-2)-...即simga(2^cnt(s)*(-1^(n-|s|)),其中s表示枚举的子集。那么cnt数组可以表示成一个高维前缀和,也就是说cnt[i]表示i所以子集的cnt之和。
for (int i = 1; i <= m; ++ i)
for (int j = 0; j < 1 << m; ++ j)
if (j & (1 << i - 1))
cnt[j] += cnt[j - (1 << i - 1)], cnt[j] %= Mod;
之后我们就可以用cnt对i进行转移了。复杂度为O(M*2^M).
普转提Day1的更多相关文章
- ZROI #364. 【2018普转提day18专题】嘤嘤嘤
ZROI #364. [2018普转提day18专题]嘤嘤嘤 直接贴代码 具体见注释 #include<stdio.h> #include<cstring> #include& ...
- ZROI #365. 【2018普转提day18专题】嘤嘤嘤嘤
ZROI #365. [2018普转提day18专题]嘤嘤嘤嘤 直接放代码 具体做法见注释 #include<stdio.h> #include<cstring> #inclu ...
- ZR普转提2
ZR普转提2 A 谢谢刁神教我A题 刚开始读错题了,以为是一个不可做的数位DP,然后就暴力滚粗 直到问了问刁神,发现自己题意是错的 然后成了比较简单的题目 直接暴力枚举每一位填什么,剩下的位数的数字都 ...
- ZR9.8普转提
ZR9.8普转提 A,B 打过的CF原题,不管了 C 确认过眼神,是我不会写的DP, 发现这个题目要求的过程类似与一个所有括号都不一样的括号匹配的过程 但是限制条件非常多,有点无从下手的感觉 我们设\ ...
- ZROI2018普转提day6t1
传送门 分析 记录区间最大值,线段树上二分找比这个点大的最靠前位置即可 代码 #include<iostream> #include<cstdio> #include<c ...
- ZROI2018普转提day6t3
传送门 分析 居然卡哈希数,万恶的出题人...... 感觉我这个方法似乎比较呆,我的代码成功成为了全网最慢的代码qwq 应该是可以直接哈希的 但由于我哈希学的不好又想练练线段树维护哈希,于是就写了个线 ...
- ZROI2018普转提day7t1
传送门 分析 一道有意思的小题... 我们发现如果$(1,1)$为白色,则将其变为白色需要偶数次操作,而如果为黑色则需要奇数次操作 我们知道要让A赢需要奇数次操作,所以我们只需要判断$(1,1)$的颜 ...
- ZROI2018普转提day7t2
传送门 分析 首先我们不难想到我们一定可以将每一个点分开算,然后看这个点被几个矩形包含 于是对于位置为$(i,j)$的点它被包含的次数为$i * (n-i+1) * j * (m-j+1)$ 这个式子 ...
- ZROI2018普转提day1t4
传送门 分析 就是飞飞侠这道题...... 我们可以将这张图建成好几层,每一层可以向下一层的上下左右无代价移动,而对于每个点如果付b[i][j]的代价就可以走到比它高a[i][j]的层上.我们用这种方 ...
随机推荐
- play ball小游戏-Alpha版本发布说明
Alpha版本发布说明 一.功能介绍 本团队所做的微信小程序是一款小球经碰撞后最终到达目的位置通关的休闲益智类游戏.Alpha版本具有的功能大体如下: 1. 闯关模式 多达12关普通竖屏关卡.4关特殊 ...
- Java并发编程(08):Executor线程池框架
本文源码:GitHub·点这里 || GitEE·点这里 一.Executor框架简介 1.基础简介 Executor系统中,将线程任务提交和任务执行进行了解耦的设计,Executor有各种功能强大的 ...
- 图解JAVA容器核心类库
JAVA容器详解 类继承结构图 HashMap 1. 对象的HashCode是用来在散列存储结构中确定对象的存储地址的. 2. 如果两个对象的HashCode相同,即在数组中的地址相同.而数组的元 ...
- java实现邮箱发送信息--验证码的发送(163邮箱)
1.maven环境 <!-- 发送邮件 --> <dependency> <groupId>javax.mail</groupId> <artif ...
- Java 的开发效率究竟比 C++ 高在哪里?
有几个原因 大师助手解决你的烦恼1. 语言上,Java是一个比C++更容易parse得多的语言,所以相应的工具链IDE会更容易做,无论多大的Java的项目,就是新手写完都不会有编译错误.但是写 ...
- e3mall商城的归纳总结7之solr搭建和应用
敬给读者的话 本文主要应用的技术是solr技术的搭建和应用,本文小编尽量写的更详细一些,让读者在不考虑项目的情况下也能正常完成solr的搭建,说完搭建之后,再说明运行solrj在项目中如何应用solr ...
- java安全编码指南之:Mutability可变性
目录 简介 可变对象和不可变对象 创建mutable对象的拷贝 为mutable类创建copy方法 不要相信equals 不要直接暴露可修改的属性 public static fields应该被置位f ...
- Android Studio出现:Your project path contains non-ASCII 错误代码解决方法
导入Project的出现: Error:(1, 0) Your project path contains non-ASCII characters. This will most likely ca ...
- oeasy教您玩转linux010106这儿都有啥 ls
回忆上次内容 上个实验我们查询了 ls 的手册: man ls
- C++中的输入输出
update&fixed: 经过实测,io解绑在各大oj以及本地评测软件上都劣于scanf 所以在大数据的情况下还是推荐尽量使用scanf! ! ! ! 众所周知,C++自带了各种输入方式 比 ...