例题1:乌龟棋

例题2: noip2015 子串

有两个仅包含小写英文字母的字符串 A 和 B。

现在要从字符串 A 中取出 k 个互不重叠的非空子串,然后把这 k 个子串按照其在字符串 A 中出现的顺序依次连接起来得到一 个新的字符串,

请问有多少种方案可以使得这个新串与字符串 B 相等?注意:子串取出的位置不同也认为是不同的方案。

设f[i][j][k][1/0]表示到了A第i位,B第j位,选了K个,1/0选育不选

转移:就是照着状态转移

a[i]==b[j]:dp[i][j][k][1]=dp[i-1][j-1][k-1][0]+dp[i-1][j-1][k][1]

else:dp[i][j][k][1]=0

dp[i][j][k][0]=dp[i-1][j][k][0]+dp[i][j][k][1]

为了节约空间,第一位可以滚掉

例题3

有一个数列,请你改变尽可能少的数,使得这个数列变成递增的

观察一下性质,没两个数之间的差必须要大于一

也就是,我们要使得\(a_j-a_i>=j-i\) 

移向

\(a_j-j>=a_i-i\)

然后我们求一个\(a_i-i\)最长下降子序列,然后总长度一减就可以了。

发现性质最重要

例题4

折叠的定义如下:

  1. 一个字符串可以看成它自身的折叠。
  2. X(S)是X(X>1)个S连接在一起的串的折叠。记作X(S) = SSSS…S(X个S)。
  3. 折叠之后的字符串可以连接和再次折叠。

    给一个字符串,求它的最短折叠长度。

    例如:3(A)C2(B) = AAACBB

    2(3(A)C)2(B)=AAACAAACBB

    AAAAAAAAAABABABCCD的最短折叠为:9(A)3(AB)CCD

    NEERCYESYESYESNEERCYESYESYES的最短折叠为:2(NEERC3(YES))

区间dp,套模板就可以了。

然后在转移的时候还要判断整个区间是否可以折叠,怎么判断:暴力


然后是背包dp

先是01/完全/多重背包的板u子


多重背包单调队列优化。

首先我们来看转移

f[i]要可以从一下几个状态转移而来

f[i-v[j]1]+w[j]1 and f[i-v[j]2]+w[j]2.........f[i-v[j]num[j]]+w[j]num[j]

然后我们将i变成一个a+b*v[j]的形式再来看一看

f[(b-1)v[j]+a]+w[j]1 and f[(b-2)v[j]+a]+w[j]2 ...................

然后我们同时减去b*w[j]

{f[(b-1)v[j]+a]+w[j](b-1) and f[(b-2)v[j]+a]+w[j](b-2)}+b*w[j] ...................

然后我们发现,如此操作以后,花括号内加的w[j]只与其位置有关,然后我们要求最大值,就可以单调队列

需要两个队列(一个也可以) ,一个是单调队列,一个是储存当前所有可以拓展的状态

两重循环,第一重枚举上面的a,队列清空

第二重枚举b,并且维护队列

int q1[maxn],q2[maxn]; //队列,q1为原始队列,q2为单调队列
int pack(int *f,int V,int v,int w,int num)//f为dp数组,V是总体积,v是单个物品的体积,w是单个物品的价值,num为数量
{
for(int d=0;d<v;d++)//枚举a
{
int t1=-1,t2=-1,h1=0,h2=0;//队列置空
for(int k=d,i=0;k<=V;k+=v,i++)//枚举b,并且算出当前的体积
{//因为我们将上一次的dp值存在队列里了,所以就不用倒序了
if(t1-h1+1==num)//如果队列满了
{
if(q1[h1]==q2[h2]) h2++;//看看单调队列是否要出队
h1++;
}
int pas=f[k]-i*w;//如此操作
while(t2>=h2&&q2[t2]<pas) t2--;
q2[++t2]=pas;//维护
q1[++t1]=pas;
f[k]=q2[h2]+i*w;//补回来
}
}
}

例题1

题意

有n个人参加拔河比赛,要把他们分为两组,每人的实力为ai,一组的实力为这组人的实力之和。求两队实力差的最小值。(两队的人数没有限制)

我们该如何使用01背包的板子进行套用ne ?

我们将每个人的实力看作容积,然后价值就全是单位1

然后我们使所有人的实力之和作为总容积

然后再输出答案。输出总体积>>1 的所能装载的最大价值。

这样的话,我们就求得最接近实力值总和>>1的方案所需要的最多人数。

这样的话就求除了最优解


例题2

开始有一个数begin,给一个长为n的序列,ci,每次操作可以选择把开始的数加或减ci,变为新的数,之后再上一次的数的基础上加或减。

要求每次操作之后的数要大于等于0,小于等于max,求最后一次操作之后这个数的最大值。如果没有满足要求的解输出-1.

设f[i][j]表示第i轮,j可不可行。然后转移一下就可以了。


其他

询问1~n之间所有数字中1的个数和。例如11011中有4个数位1。

然后套一个数位dp就可以了。

#include<cstdio>
#include<iostream>
#include<algorithm>
long long f[20];
long long n;
long long ans;
void solve(long long t,long long s)
{
if(t==1)
{
for(int i=0;i<=n%10;i++)
if(i==1) ans+=1;
return ;
}
long long now=(n/t)%10;
for(int i=0;i<now;i++)
{
if(i==1) ans+=t;
ans+=f[s-1];
}
if(now==1)
ans+=n%t+1;
solve(t/10,s-1);
}
int main()
{
scanf("%lld",&n);
long long t=1;
for(int i=1;i<=9;i++)
{
f[i]=i*t;
t*=10;
}
t=1;
long long s=1;
while(t<n) t*=10,s++;
solve(t,s);
printf("%lld",ans);
}

QBXT Day 2 记录的更多相关文章

  1. 2018/8/15 qbxt 测试

    2018/8/15 qbxt 测试 期望得分:100:实际得分:50   不知道为什么写挂了,明明是个水题 T^T 思路:模拟 注意:如果用 char 类型存储的话,如果有'z' + 9 会爆char ...

  2. 记2018/4/29 qbxt 测试

    记 2018/4/29  qbxt 测试(提高基础班) 简单的 NOIP 模拟赛 竞赛时间: 2018 年 4 月 29 日 13:30-17:00 题目名称 乘法 求和 计数 输入文件名 mul.i ...

  3. 【五一qbxt】day7-2 选择客栈

    停更20天祭qwq(因为去准备推荐生考试了一直在自习qwq) [noip2011选择客栈] 这道题的前置知识是DP,可以参考=>[五一qbxt]day3 动态规划 鬼知道我写的是什么emm 这道 ...

  4. 记一次debug记录:Uncaught SyntaxError: Unexpected token ILLEGAL

    在使用FIS3搭建项目的时候,遇到了一些问题,这里记录下. 这里是发布搭建代码: // 代码发布时 fis.media('qa') .match('*.{js,css,png}', { useHash ...

  5. nginx配置反向代理或跳转出现400问题处理记录

    午休完上班后,同事说测试站点访问接口出现400 Bad Request  Request Header Or Cookie Too Large提示,心想还好是测试服务器出现问题,影响不大,不过也赶紧上 ...

  6. Kali对wifi的破解记录

    好记性不如烂笔头,记录一下. 我是在淘宝买的拓实N87,Kali可以识别,还行. 操作系统:Kali 开始吧. 查看一下网卡的接口.命令如下 airmon-ng 可以看出接口名称是wlan0mon. ...

  7. 2015 西雅图微软总部MVP峰会记录

    2015 西雅图微软总部MVP峰会记录 今年决定参加微软MVP全球峰会,在出发之前本人就已经写这篇博客,希望将本次会议原汁原味奉献给大家 因为这次是本人第一次写会议记录,写得不好的地方希望各位园友见谅 ...

  8. 分享一个SQLSERVER脚本(计算数据库中各个表的数据量和每行记录所占用空间)

    分享一个SQLSERVER脚本(计算数据库中各个表的数据量和每行记录所占用空间) 很多时候我们都需要计算数据库中各个表的数据量和每行记录所占用空间 这里共享一个脚本 CREATE TABLE #tab ...

  9. 我是如何在SQLServer中处理每天四亿三千万记录的

    首先声明,我只是个程序员,不是专业的DBA,以下这篇文章是从一个问题的解决过程去写的,而不是一开始就给大家一个正确的结果,如果文中有不对的地方,请各位数据库大牛给予指正,以便我能够更好的处理此次业务. ...

随机推荐

  1. hadoop-2.6.0.tar.gz + spark-1.6.1-bin-hadoop2.6.tgz的集群搭建(单节点)(CentOS系统)

    福利 => 每天都推送 欢迎大家,关注微信扫码并加入我的4个微信公众号:   大数据躺过的坑      Java从入门到架构师      人工智能躺过的坑         Java全栈大联盟   ...

  2. 常用sql语句整理[MySql]

    查看执行计划 explain update test100 set contractSn=99 where contractSn=45; insert ... on duplicate key使用 i ...

  3. jQuery对新添加的控件添加响应事件

    1. 通过id和类控制 <html> <head> <script src="jquery.js"></script> <sc ...

  4. Java学习第二十天

    1:递归(理解) (1)方法定义中调用方法本身的现象 举例:老和尚给小和尚讲故事,我们学编程 (2)递归的注意事项: A:要有出口,否则就是死递归 B:次数不能过多,否则内存溢出 C:构造方法不能递归 ...

  5. 【VMware】安装不同系统的虚拟机出现开机黑屏的情况

    解决方法一: 1.以管理员身份运行命令提示符(cmd.exe),输入命令 netsh winsock show catalog 按下回车键执行命令(可以看到VMware注册了两个LSP:vSocket ...

  6. SQL动态配置,动态解析SQL

    在项目中使用SQL动态配置的方式可以让后期的维护和发布后的修改变得更加方便,无论使用那种配置方式都离不开解析成最终真正能执行的SQL.下面代码就是一种比较简单的处理方法,SQL的参数以##括起来. 1 ...

  7. node.js获取命令参数

    假如有个加密程序test.js,不想每次加密的时候都修改代码,直接通过控制台输入参数 var createHash = require('sha.js') var sha1 = createHash( ...

  8. 05.while循环的练习

    练习1: namespace _05.while循环练习01 { class Program { static void Main(string[] args) { //打印100次"努力学 ...

  9. glyphicons-halflings-regular.woff2 文件 404

    搜索了下,果然是因为mine没有配置的原因. http://stackoverflow.com/questions/32300578/how-to-remove-error-about-glyphic ...

  10. final关键字介绍

    许多程序设计语言都有自己的办法告诉编译器某个数据是“常数”.常数主要应用于下述两个方面: (1) 编译期常数,它永远不会改变 (2) 在运行期初始化的一个值,我们不希望它发生变化 对于编译期的常数,编 ...