题目大意是一个3N的棋盘,用12的骨牌覆盖的方案数

使用一个三位的二进制数表示状态,则可以有:

n行:000 ……………………………………. 000

n-1行:000 001 010 011………………… 111

为避免状态重复,我们不允许在n-1行上平放骨牌(因为等会由n-1行转移的第n行时,我们可以在n行上平放),所以我们可以构造一个矩阵来表示这些转移(具体自己画一画就知道了),即可以得到以下矩阵A:

0000000100000010000001000000100100010000001000000100000110010010然后求A的n次幂,A^n[7][7]就是我们要的答案啦~
Continue reading

题目大意:Dima送给他女友N只兔子,编号1-n(n<=3000),当给兔子喂食时,它们会产生joy值,joy的取值有三种状态:
1.当前兔子左右两边都没有已经喂过的兔子;
2.当前兔子左右两边有且仅有一边有已经喂过的兔子;
3.当前兔子左右两边的兔子均已喂过。(编号1,n的兔子显然无法满足)
现给出每只兔子三种状态下的joy值,希望你帮助Dima的女友有Inna选择某种喂食顺序,使得总的joy值最大,仅输出最大的joy值。
Continue reading

传送门:题目
怎么说呢,水题一道,直接用小根堆解决
主要是想通过这道题学习C++STL里面heap的用法
最后还是没有纠结出来,然后发现手写也不会了,就在网上找了一段,挺简洁的,以后就用这个做模板
Continue reading

C++指针备忘

in 技术

摘录自 C++ Primer Plus

指针的危险

一定要在对指针应用解除引用操作符(*)之前,将指针初始化为一个确定的、适当的地址。这是关于是使用指针的金科玉律。

如下代码:

long * fellow; //create a pointer-to-long

*fellow = 223323; //place a value in never-never land

fellow确实是一个指针,但它指向哪里呢?上述代码没有将地址赋给fellow。那么223323将会被放在哪里呢?我们不知道。由于fellow 没有被初始化,它可能有任何值。不管是什么,程序都将把它解释为储存223323的地址。如果fellow的值碰巧为1200,计算机将把数据放在地址1200上,即使这恰巧是程序代码的地址。fellow指向的地方很可能并不是要存储223323的地方。这种错误可能会导致一些最隐匿、最难以跟踪的bug。

Comment and share

动态内存分配

in 技术

摘自Matrix67 C语言速成手册

四种动态内存分配函数,使用它们前需要在程序最前面包含头文件stdlib.h(C++应该是cstdlib)。四种函数的格式分别为:

void malloc ( size );
void
calloc ( n, size );
void free ( pointer );
void *realloc( pointer, size );
Continue reading

分块思想学习

in 技术

早上看了一下七中王迪大神写的一篇论文,学习了一下分块思想,只看了一点点,基本上是看着代码,再自己脑补的。

所谓分块就是把规模为n的问题分割成k块,每块规模为s,为了使对块内和整个范围的操作的复杂度平均些,令k = s = √n。利用这个思想就能把O(n)的复杂度降到O(√n),从而达到优化算法的目的。论文中如是说。

只看了一个简单的问题,如有一长度为n的正整数数列,完成m次操作(1≤n,m≤10 ˆ5),M x y:把第x个数字修改为y;Q x y:询问区间 [x,y] 中的最大值Max。

这个问题相当经典,有多种算法可解,因为在学分块,自然采用块状解决之。
Continue reading

这道题显然有,矩阵乘法可解(由数据范围可得)

显然有题目要求: f[n]=∑f[i] (n-k<i<n-1),矩阵乘法相关知识自行google,推荐阅读Matrix67写的一篇文章。

所以构造有数组A(k*k):

000…1

100…1

010…1

001…1

因为看k<10,我们可以先计算出f[1]~f[k],然后用矩阵乘法加速,计算出A^(n-k),最后再f*A^(n-k)乘一下就得出了。

我用的是递归式的矩阵二分取幂,后来才知道这样写会显得你很弱智……我也不知道为什么,然后就顺便再复习了一下,快速幂的非递归写法。
Continue reading

写在高考前

in 杂记

保送生的颓废生活……就快完结,可惜这并不是我想要的生活。
本来回家是为了学习,可如今C++还没学好,日子就快结束了。整天被传召回学校,一个早上就轻松地没了……
因为承诺过会去高考,所以剩下这两天是否要复习呢,本来决定要的,可又彷徨了
踏进六月,终于能上网了,可还是没能认真学习,感觉还是先过完高考这关再说吧,虽然现在对高考没什么感觉,我总是太在乎别人的感受了吗。
混乱的语言,也正表明我现在的心境。也许是最近没有好好感受算法的魅力了吧,在题库闲逛,想code时却才发现自己的语言还没学好……,pascal又在本能上抑制去使用它。
算了,明后两天复习下,再考两天试,就不用管了。
还有我的足球赛啊,好想参加啊……我应该去写份计划表吗,感觉自制力不行写了也没用对吧。

Comment and share

sillyplus

Write the code. Change the world


Student


China