自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(14)
  • 资源 (3)
  • 收藏
  • 关注

原创 sicily 13602(动态规划)

题目链接: sicily 13602 拿到题目马上就想到动规了,而且应该算是棋盘型的DP,状态转移方程挺好想的,就直接上代码了:#include <bits/stdc++.h>using namespace std;long long dp[35][35]; //注意数据范围int main(){ int n; while(~scanf("%d",&n)&&n)

2015-02-27 16:04:30 671

原创 卡特兰数

卡特兰数是组合数学中一个经常在各种计数问题中出现的数列,公式如下: ① 数列的前几项:1,1,2,5,14,42,132,429,1430,4862……性质: 卡特兰数的公式可以表达成下面形式: ② 也可以用递推公式来表示: ③ 应用: 1、大家最熟悉的应该是用Cn来表示将n+2边的凸多边形切割成三角形的方法个数,当n=4时: 2、Cn表示长度2n的dyck word的个数。Dy

2015-02-27 15:57:17 677

原创 动态规划学习系列——划分DP(三)

划分DP第三题,wikioi 1040,送我n个WA~~~题目大意: 这道题题述有着UVA的特色,够废话,其实就是读入一个长度最大200的字符串(不知道为何要分行输入,完全没有意义啊),分成m部分,使各部分单词量加起来最大 解题思路: 这题划分的部分跟乘积最大那题其实很像,状态转移方程也很容易想到: dp[i][k]=max(dp[i][k],dp[j][k-1]+scnt[j+1][i])

2015-02-22 14:13:36 1526

原创 动态规划学习系列——划分DP(二)

划分型DP第二题,wikioi 1039,与第一题乘积最大思路有所不同。题目要求: 将一个数划分成几部分,问一共有多少种分法。 真 · 解题思路: 其实跟小学奥赛的一些题有点像,我们先来看一个例子: 7 分成 3 部分,有四种办法: 1,1,5;1,2,4;1,3,3;2,2,3 。 我们人脑来考虑问题的时候是怎么想的呢?显然,从1开始,1是第1部分,然后剩下6分成2部分,我们依然是从1

2015-02-21 16:08:34 1641

原创 动态规划学习系列——划分DP(一)

划分型DP,是解决跟划分有关的题目的一种DP思路,个人觉得,是目前接触的DP类型中最难的一种,因为感觉思路并不确定,不过正是不确定,才可以体会到算法的精妙之处。题目链接:wikioi_1017 要求是将一个n位的数分成m部分,使各部分的乘积最大。解题的思路基于一个事实:当前的数可以分成m-1部分,那么加多几位分成m部分不是可以从原来的推出来。从这句差不多是废话的话中我们就可以推出状态转移方程:

2015-02-21 14:10:39 2500

原创 sicily_1012 (计算几何)

计算几何第一题,从没有做过几何题,每次看到就跳,今天是一个开始。这题的递推是小事,重点是几何部分。我用的是高中的解析几何的做法,先求中垂线斜率,已知中点,然后通过距离来求出要求的点的坐标(PS:这题放在高中是超级水题啊,为什么写成C++这么烦) 几何部分代码:void cal(int i,int j){ double l=2.0,h,d; d=sqrt((dp[i].x-dp[j

2015-02-21 12:27:56 494

原创 sicily_1221 (0-1背包问题)

题述: 小W发明了一个游戏,他在黑板上写出了一行数字a1,a2,….an,然后给你m个回合的机会,每回合你可以从中选择一个数擦去它,接着剩下来的每个数字ai都要递减一个值bi。如此重复m个回合,所有你擦去的数字之和就是你所得到的分数。要你把这个分数最大化。 输入: 第一行,一个整数n(1<=n<=200),表示数字的个数。 第二行,一个整数m(1<=m<=n),表示回合数。 接下来一行有

2015-02-19 23:13:09 809

原创 sicily_1150 & sicily_1151

宽搜 + 康托展开 两题其实是一样的两道题,可以训练宽搜,但是,这两题作为宽搜其实是水题,比较难的地方其实是对状态的记录,即队列的元素采用什么来保存,这里用到了康托展开(介绍点这儿) 解决了保存的问题,接下来的都是琐事了,上代码://sicily 1150 简单魔板#include <bits/stdc++.h>using namespace std;int n,m,goal,tmp[10],

2015-02-18 14:38:57 458

原创 康托展开

康托展开是一个全排列到一个自然数的双射,常用于构建哈希表时的空间压缩。 康托展开的实质是计算当前排列在所有由小到大全排列中的顺序,因此是可逆的。全排列: 1,2,3三个数的全排列: 1,2,3 1,3,2 2,1,3 2,3,1 3,1,2 3,2,1 总共 3! = 6种。 但是我们用一些数或数组来表示当前排列的顺序时,往往是用的 3^3 = 9 的存储空间,当不同的数数量较多的时

2015-02-18 14:25:00 666

原创 动态规划学习系列——区间DP(二)

上一篇我们看了区间型DP的一道经典入门题——石子归并,这一次同样是类似的一道题——石子归并2 题目链接:wikioi 2102 题干不同之处在于,现在我们的石子不是排成一列了,而是围成一个环,我们要怎么把问题转化成普通的石子归并呢? 其实这是一种挺常见的算法技巧——变环为列 方法:长度为len的环 —> 长度为2*len的列 为什么这样变换是成立的呢?因为每一种截取顺序都可以在变换后的列出

2015-02-15 22:43:57 911

原创 动态规划学习系列——区间DP(一)

学习一个算法,还是从题目开始比较好,我们就从一道经典例题开始: wikioi 1048 石子归并 Description 有n堆石子排成一列,每堆石子有一个重量w[i], 每次合并可以合并相邻的两堆石子,一次合并的代价为两堆石子的重量和w[i]+w[i+1]。问安排怎样的合并顺序,能够使得总合并代价达到最小。 Input Description 第一行一个整数n(n第二行n个整数w

2015-02-13 17:13:50 5171

原创 动态规划学习系列——数位DP(练手一)

大概了解了什么是数位DP,想做几道题练练手,于是找到了这道题: 题目链接:hdu 2089 不要62 题目大意是统计【A,B】区间内没有4并且没有62的数,因为有之前那道题的铺垫,很快想到了解决方法。 思路: 预处理一个dp数组,dp【i,j】代表最高位为 j 的 i 位数满足题述要求的的个数;然后分别统计【0,B】和【0,A-1】区间内满足条件的数——与之前那题类似,不过更简单了,具体来看代

2015-02-10 16:08:30 1538

原创 动态规划学习系列——数位DP(初识)

引入第一次知道数位DP这东西,是在大二新手赛,那时有一道“Cutting Trees”的题目,现在来看就是水题一道,可以用多种方法水过,可惜当时愣是没做出来,其他水题也没做出来,于是被大一虐成翔。抱着学习的态度,我们再来看看这道题。题述多组询问,每组询问A和B,为[A,B]范围内,有多少个数是由一个上升序列组成,例如“1379”,“1234”等等(0 深搜解法因为题目数据挺

2015-02-09 19:35:00 705

转载 欢迎使用CSDN-markdown编辑器

欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦:Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传LaTex数学公式UML序列图和流程图离线写博客导入导出Markdown文件丰富的快捷键快捷键加粗 Ctrl B 斜体 Ctrl I 引用 Ctrl

2015-02-09 15:32:37 389

pintos_project1

斯坦福大学pintos操作系统,Thread部分,通过27个tests

2015-06-08

CPU_hazard

SMIE计算机组成原理课程五级流水线hazard处理,通过5个tests

2015-06-01

空空如也

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

TA关注的人

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