自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(8)
  • 收藏
  • 关注

原创 P2704 炮兵阵地 (状压dp入门题) 题解

题意简述:给定一个大小为n*m的棋盘,棋盘上'H'表示不可放置,'P'表示可放置,一个棋子在棋盘上的攻击范围是其左右上下2格以内,求不冲突情况下的最多摆放棋子数。分析:决策是对于一个P格子考虑放或不放,因为棋盘是二维的,所以考虑状压,其中m<=10,所以对行状压,那么可用f[i]表示前i行的最多摆放棋子数,但考虑到第i行的摆放决策取决于i-2、i-1行的摆放情况,因此需要给f增加两维,即用f[i][j][k]表示摆放前i行,并以j和k作为结尾的两行的最大棋子数,于是状态转移方程为:f[i][j][

2022-02-10 13:59:48 588

原创 P7690 A decorative fence(dp+康托展开) 题解

题意简述:由1——n组成的排列,若其元素大小交替,则称为可爱排列,给定n和k,求所有可爱排列中字典序第k小的可爱排列。分析:代码:#include<stdio.h>#define int long longconst int N=20+3;int f[N][N][2];bool vis[N];void dp(int n=20){ f[1][1][1]=f[1][1][0]=1; for (int i=2;i<=n;i++) { f[i][i][

2022-02-07 17:29:49 270

原创 P4342 Polygon(简单区间dp) 题解

题意简述:n个结点围成一圈,相邻结点连一条边表示加或乘,开始时先删去一条边,然后每次合并相邻结点直至只剩一个结点,求最后结点数值的最大值以及所有最优删边方案。分析:这是做过的第二道区间dp的题目,这道题的思想和石子合并很像,也是开环为链,唯一的坑点就是当处理乘操作时,最大值*最大值不一定等于最大值,因为可以是负数,所以需要同时记录最大值和最小值,乘操作时就考虑4种情况就行,即max*min、max*max、min*max、min*min。输出方案就按顺序扫一遍n条链的最大值即可。时间复杂度为O(n^3)

2022-02-07 17:07:40 295

原创 UVA323 Jury Compromise 题解

题目简述:给定n个元素,其有a和b两种属性,从中选m个元素,使得属性a之和与属性b之和的差值最小,满足上述条件后再保证属性a之和与属性b之和的和最大。要求输出方案。分析:先不考输出方案,就是个简单的dp题。因为数据范围较小,可以多开几个维度,先考虑一维f[i]表示前i个元素中挑的最小差值,然而发现不能递推,于是增加第二维表示差值,这样,f[i][j]表示从i个元素中挑出差值j是否可能。然后,考虑到挑选元素个数的限制,再增加一维表示元素个数,这样,f[i][j][k]表示从前i个元素挑k个元素达到j差值的

2022-02-05 11:23:54 412

原创 P2893 Making the Grade G 题解(dp simple)

题意简述:给定一个序列ai,将其中一个元素ai变成bi需要|bi-ai|的花费,求将其变成不下降或不上升序列的最小费用。分析:先不考虑其值域,就是一个dp水题。设f[i][j]表示修改前i个元素为不下降序列并以j结尾的最小费用,容易写出转移方程:,但问题在于第二维范围1e9太大了,既MLE、也TLE。考虑对第二维进行优化,通过手动模拟样例不难发现,要达到最小费用,只能变成原序列已存在的元素,因此考虑将原序列离散化,这样,第二维范围就降低到n了。f数组第一维可以去掉,空间复杂度为O(n),min可以边枚举

2022-02-04 11:39:07 380

原创 P2375 动物园 题解

题意简述:给定字符串,num[i]定义为该字符串前i个字符构成的前缀的最长不相交可匹配前缀后缀的个数,求(num[i]+1)的乘积。分析:很容易想到暴力跳nxt的方法,nxt跳到前缀长度一半时开始计数,但很可惜,时间复杂度为O(L^2),直接T飞。然后发现可以在求nxt的同时处理出step[i],表示从i跳到0所需要的次数,这样,只需要跳nxt直到第一次长度小于一半即可,然而时间复杂度依然没变。继续优化,发现主要是暴力跳nxt到长度一半这个过程太慢了,怎么优化呢?考虑倍增跳nxt。这样,就能将时间复杂度

2022-01-30 21:01:57 481

原创 CF1627D Not Adding

题意简述:给定一个序列,求其所能产生的gcd个数。分析:正向枚举时间复杂度为O(2^n),直接T飞。但观察到i其数值范围仅为1e6,故考虑反向枚举每一个数能否被生成,对于一个数a,显然只能被其倍数的gcd生成,关键是如何判断序列中a的倍数能否生成a。设a的两个倍数为pa、qa,显然gcd(pa,qa)=gcd(p,q)*a>=a,且仍然为a的倍数,因此只要判断能产生的最小gcd和a是否相等即可,因为参与gcd的数越多,该值越小,所以只需判断全部a的倍数的gcd值是否等于a即可。时间复杂度为O(Ml

2022-01-29 16:05:21 602

原创 高斯消元法解多项式回归

问题背景:给定一个单特征量、单输出值的数据集,找到一个拟合效果最佳的多项式关系,并预测其趋势。基本思路:用预测值与真实值的差方和来表征多项式的拟合效果,称为损失函数,损失函数极值点即为最佳拟合效果的参数,而多元函数的极值点可以通过求偏导并联立方程组解得。具体过程:1.求损失函数偏导,得到线性方程组: void ini(){ for (int i=1;i<=30;i++) for (int j=0;j<=5;j++) ...

2021-05-24 22:10:32 728 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除