*J

Todo

≯℡__Kan透↙ 提交于 2020-08-19 09:36:45
Todo 打辅助.jpg 抢人头.jpg 抢不到我 当 场 把 键 盘 吃 掉 ! ABC134 F Permutation Oddness 每轮同时填格子和数,然后去绝对值。 $f[i][j][k]$ 表示填了前 $i$ 个数和前 $i$ 个位置,空了 $j$ 个位置同时留了 $j$ 个数(我一开始还打算分两个状态来着),已填的部分产生的权为 $k$ 的方案数。 每次转移: 1.第 $i$ 个数填第 $i$ 个位置:空了 $j$ 个位置同时留了 $j$ 个数,产生权 $0$ ,方案数为 $1$; 2.第 $i$ 个数填前面空的格子,以前留的数填第 $i$ 个位置:空了 $j-1$ 个位置同时留了 $j-1$ 个数,产生权 $i+i$ ,方案数 $j^2$ ; 3.第 $i$ 个数填前面空的格子,第 $i$ 个位置留空:空了 $j$ 个位置同时留了 $j$ 个数,产生权 $i-i$ ,方案数为 $j$ ; 4.遗留第 $i$ 个数,以前留的数填第 $i$ 个位置:空了 $j$ 个位置同时留了 $j$ 个数,产生权 $-i+i$ ,方案数为 $j$ ; 5.遗留第 $i$ 个数,第 $i$ 个位置留空:空了 $j+1$ 个位置同时留了 $j+1$ 个数,产生权 $-i-i$ ,方案数 $1$ 。 #include<bits/stdc++.h> using namespace std;

网络流24题-魔术球问题

主宰稳场 提交于 2020-08-17 06:22:54
魔术球问题 时空限制 1000ms / 128MB 题目描述 «问题描述: 假设有n根柱子,现要按下述规则在这n根柱子中依次放入编号为1,2,3,...的球。 (1)每次只能在某根柱子的最上面放球。 (2)在同一根柱子中,任何2个相邻球的编号之和为完全平方数。 试设计一个算法,计算出在n根柱子上最多能放多少个球。例如,在4 根柱子上最多可放11 个球。 «编程任务: 对于给定的n,计算在n根柱子上最多能放多少个球。 输入输出格式 输入格式: 第1 行有1个正整数n,表示柱子数。 输出格式: 程序运行结束时,将n 根柱子上最多能放的球数以及相应的放置方案输出。文件的第一行是球数。接下来的n行,每行是一根柱子上的球的编号。 输入输出样例 输入样例: 4 输出样例: 11 1 8 2 7 9 3 6 10 4 5 11 说明 4<=n<=55 最小路径覆盖问题。 DAG的最小路径覆盖: 定义: 在一个有向图中,找出最少的路径,使得这些路径经过了所有的点,且这些路径之间不会经过相同的点。 算法: 把原图的每个点V拆成 V x 和 V y 两个点,如果有一条有向边A->B,那么就加边 A x − > B y 。这样就得到了一个二分图。那么最小路径覆盖=原图的结点数-新图的最大匹配数。 证明 :一开始每个点都是独立的为一条路径,总共有n条不相交路径

树状数组

房东的猫 提交于 2020-08-13 10:48:53
前言 如果你在考提高组的前一天还对这有疑问,那你会与一等奖失之交臂; 如果你还在冲击普及组一等奖,那这篇博客会浪费你人生中宝贵的5~20分钟。 (这句话摘自 Dijkstra_Liu的blog ) 概念 树状数组(Binary Indexed Tree(B.I.T),Fenwick Tree)是一个查询和修改都为 log(n) 的基于倍增思想数据结构(数组)。 树状数组和线段树很像,但能用树状数组解决的问题,基本上都能用线段树解决,而线段树能解决的树状数组不一定能解决。 但相比较而言,树状数组效率要高很多,所以在某些题来说,树状数组是不二之选。 结构 在oi-wiki上的图, 思想和线段树有些类似:用一个大节点表示一些小节点的信息,进行查询的时候只需要查询一些大节点而不是更多的小节点。 我们假设父亲节点表示它子子孙孙的节点。 列表: 点 代表 个数 1(0001) 1 1 2(0010) 1 , 2 2 3(0011) 3 1 4(0100) 1 , 2 , 3 , 4 4 5(0101) 5 1 6(0110) 5 , 6 2 7(0111) 7 1 8(1000) 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 8 这里引入一个新函数 lowbit(x) ,即算出x二进制的从右往左出现第一个1以及这个1之后的那些0组成数的二进制对应的十进制的数。 我们 不难 发现

树状数组

旧时模样 提交于 2020-08-10 15:51:08
前言 如果你在考提高组的前一天还对这有疑问,那你会与一等奖失之交臂; 如果你还在冲击普及组一等奖,那这篇博客会浪费你人生中宝贵的5~20分钟。 (这句话摘自 Dijkstra_Liu的blog ) 概念 树状数组(Binary Indexed Tree(B.I.T),Fenwick Tree)是一个查询和修改都为 log(n) 的基于倍增思想数据结构(数组)。 树状数组和线段树很像,但能用树状数组解决的问题,基本上都能用线段树解决,而线段树能解决的树状数组不一定能解决。 但相比较而言,树状数组效率要高很多,所以在某些题来说,树状数组是不二之选。 结构 在oi-wiki上的图, 思想和线段树有些类似:用一个大节点表示一些小节点的信息,进行查询的时候只需要查询一些大节点而不是更多的小节点。 我们假设父亲节点表示它子子孙孙的节点。 列表: 点 代表 个数 1(0001) 1 1 2(0010) 1 , 2 2 3(0011) 3 1 4(0100) 1 , 2 , 3 , 4 4 5(0101) 5 1 6(0110) 5 , 6 2 7(0111) 7 1 8(1000) 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 8 这里引入一个新函数 lowbit(x) ,即算出x二进制的从右往左出现第一个1以及这个1之后的那些0组成数的二进制对应的十进制的数。 我们 不难 发现

JavaScript图形实例:太极图

喜你入骨 提交于 2020-08-07 21:44:02
在Canvas API中,上下文CanvasRenderingContext2D对象提供了一个绘制圆与圆弧的方法,其基本格式为: void arc(in float x, in float y, in float radius, in float startAngle, in float endAngle, in boolean anticlockwise); 其中,参数x和y是圆心坐标,radius是半径,startAngle和endAngle则是扇形的起始角度和终止角度(以弧度表示),anticlockwise表示作图时应该逆时针画(true)还是顺时针画(false)。 1.太极图 通过绘制4个半圆弧和两个小圆的方式可以绘制一个太极图。编写HTML文件的内容如下。 <!DOCTYPE html> <head> <title>太极图</title> <script type="text/javascript"> function draw(id) { var canvas=document.getElementById(id); if (canvas==null) return false; var context=canvas.getContext('2d'); context.fillStyle="#EEEEFF"; context.fillRect(0,0,400,400

Atcoder Educational DP Contest 题解

蓝咒 提交于 2020-05-05 14:07:10
A - Frog 1/ B - Frog 2 入门... 1 #include<cstdio> 2 #define abs(a) ((a)>=0?(a):(-(a))) 3 #define min(a,b) ((a)<(b)?(a):(b)) 4 #define maxn 100050 5 using namespace std; 6 int dp[maxn],a[maxn]; 7 int main(){ 8 int n,k= 2 ; 9 scanf( " %d " ,& n); 10 for ( int i= 1 ;i<=n;i++ ) 11 scanf( " %d " ,&a[i]),dp[i]= 1e9; 12 dp[ 1 ]= 0 ; 13 for ( int i= 2 ;i<=n;i++ ){ 14 for ( int j= 1 ;j<=k;j++ ) 15 if (i-j> 0 ) dp[i]=min(dp[i],dp[i-j]+abs(a[i-j]- a[i])); 16 } 17 printf( " %d\n " ,dp[n]); 18 return 0 ; 19 } A and B C - Vacation $dp[i][0/1/2]$ 表示到第 $i$ 个 这一个选 $0/1/2$ 转移就很显然了.... 1 #include<cstdio> 2 #define

背包问题(01背包,完全背包,多重背包(朴素算法&&二进制优化))

最后都变了- 提交于 2020-05-05 13:01:03
写在前面:我是一只蒟蒻~~~ 今天我们要讲讲动态规划中 最最最最最 简单 的背包问题 1. 首先,我们先介绍一下 01背包 大家先看一下这道01背包的问题 题目 有m件物品和一个容量为n的背包。第i件物品的大小是w[i],价值是k[i]。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。 题目分析: 我们刚刚看到这个题目时,有的人可能会第一想到贪心,但是经过实际操作后你会很~~神奇~~的发现,贪心并不能很好的解决这道题(没错,本蒟蒻就是这么错出来的)。这个时候就需要我们非常强大的动态规划(DP)出马。 我们可以看出,本题主要的一个特点就是关于物品的选与不选。这时候我们就会想如何去处理,才可以使我们装的物品价值总和最大,而且这道题的物品只有一个,要么选一个,要么不选。所以这个时候我们就可以推出它的状态转移方程(啥!你不知道啥是状态转移方程?那你 自行理解 吧)。 我们设f[i][j]为其状态。就有了以下式子 1 f[i][j]=max(f[i- 1 ][j],f[i- 1 ][j-w[i]]+k[i]); i表示件数,j表示空间大小。 f[i][j]就表示i件物品下背包空间为j的状态。 f[i-1][j]表示在i-1件时背包空间为j的状态(在这中间则代表了在i件时不取这件物品)。 f[i-1][j-w[i]]+k[i]表示取这件物品后该背包的空间为j-w[i

212.基于DCT变换的水印算法模拟

心已入冬 提交于 2020-05-04 10:24:16
摘要: 数字水印在保护多媒体数字产品版权方面发挥着巨大作用, 是信息隐藏领域研究的热点之一, 数字水印算法对不可感知性和鲁棒性要求较高, 变换域DCT技术能更好地满足水印的不可感知性和鲁棒性。本文对基于DCT变换的数字水印算法进行阐述,并通过Matlab进行模拟。 关键词: 数字水印;DCT变换;鲁棒性;算法模拟 1 前言   随着数字技术的发展,Internet应用日益广泛,数字媒体因其数字特征极易被复制、篡改、非法传播及蓄意攻击,其版权保护已日益引起人们的关注。因此,研究新形势下行之有效的版权保护和认证技术具有深远的理论意义和广泛的应用价值。   数字水印技术,是指在数字化的数据内容中嵌入不明显的记号,从而达到版权保护或认证的目的。被嵌入的记号通常是不可及或不可察觉的,但是通过一些计算操作可以被检测或提取。因此,数字图像的内嵌水印必须具有以下特点:透明性、鲁棒性、安全性。   在图像的DCT系数上嵌入水印信息具有诸多优势,首先,DCT变换是实数域变换,对实系数的处理更加方便,且不会使相应的信息发生改变。第二,DCT变换是有损图像压缩JPEG的核心,基于DCT变换的图像水印将兼容JPEG图像压缩。最后,图像的频域系数反应了能量分布,DCT变换后图像能量集中在图像的低频部分,即DCT图像中不为0的系数大部分集中在一起(左上角),因此编码效率很高

LOJ——#6277. 数列分块入门 1

无人久伴 提交于 2020-05-04 06:44:25
~~推荐播客~~ 「分块」数列分块入门1 – 9 by hzwer 浅谈基础根号算法——分块 博主蒟蒻,有缘人可直接观摩以上大佬的博客。。。 #6277. 数列分块入门 1 题目大意: 给出一个长为 $n$ 的数列,以及 $n$ 个操作,操作涉及区间加法,单点查值。 分块入门,区间修改+单点查询 所谓分块,实际上是一种优美的暴力,算是一种数据结构吧。。。 将区间分成许多大小相同的块,对于多出来的部分暴力去做,一般块的大小为$√n$ 看了大佬们的代码,有点儿懵逼=_= 来模拟一下流程吧,可能会清晰一点儿 如图所示,暴力地将一段长度为$10$的序列分成了$4$块,其中$3$块是大小为$√n$的块。 每个数所属块的标号显然是$bl[i]=(i-1)/blo+1$,其中$blo$为块的大小(手推一下即可) 假如你暴力修改某个区间,假设为$[2,7]$,( 算了,自己暴力模拟吧 ) 你首先要做的是暴力修改小区间,此时小区间为$[2.3]$和$[7,7]$ 这里小区间一般有两个,即最左边不在整个块中的数,和最右边不在整个块中的数 手推一下,暴力修改的左边区间为$[l,min(bl[l]*blo],r)$ emmmmm,我知道暴力修改左边区间的右端点就是$bl[l]*blo]$,为什么还要和给定修改的区间右端点去$min$呢? 。。。思考一下?( 大佬说显然嘛 ) 有可能这个待修改区间$[l,r

BZOJ1229 & 洛谷2917:[USACO2008 NOV]toy 玩具 & 洛谷4480:[BJWC2018]餐巾计划问题——题解

試著忘記壹切 提交于 2020-05-04 01:58:28
标题很长emmm…… [USACO2008 NOV]toy 玩具 https://www.luogu.org/problemnew/show/P2917 https://www.lydsy.com/JudgeOnline/problem.php?id=1229 [BJWC2018]餐巾计划问题 https://www.luogu.org/problemnew/show/P4480 其中[BJWC2018]餐巾计划问题的数据范围更大,且数据强度可能更强,因此下文围绕该问题展开。 一个餐厅在相继的n天里,每天需用的餐巾数不尽相同。假设第i天(i=1,2,...,n)(i=1,2,...,n)需要ri块餐巾。餐厅可以在任意时刻购买新的餐巾,每块餐巾的费用为p。 使用过的旧餐巾,则需要经过清洗才能重新使用。把一块旧餐巾送到清洗店A,需要等待m1天后才能拿到新餐巾,其费用为c1;把一块旧餐巾送到清洗店B,需要等待m2天后才能拿到新餐巾,其费用为c2。 例如,将一块第k天使用过的餐巾送到清洗店A清洗,则可以在第k+m1天使用。 请为餐厅合理地安排好n天中餐巾使用计划,使总的花费最小。 对于50%的数据,我们有一个很经典的网络流做法 洛谷1251:[网络流24题]餐巾计划问题 。 但是数据规模扩大后就显然不能用网络流求解了。 分两种情况: 1.快洗店更贵: