自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

荒野孤鹰

广阔天地大有作为

  • 博客(19)
  • 资源 (1)
  • 收藏
  • 关注

原创 USACO--3.3Home on the Range+DP

二维dp,定义G[i][j]表示i,j为顶点的最大正方形边长.如果G[i][j]本身为1,则转移方程为:G[i][j]=min(G[i+1][j],G[i][j+1],G[i+1][j+1])+1.其实就是由其下方,右方,右下方的点确定它所能构成的最大正方形(在图上可以很清楚的发现这一点). 其实这道题也可以暴力枚举;我们枚举每个点作为正方形左上角顶点时可以得到的最大边长正方形,而边长为k的正方形

2015-05-29 23:41:26 802

原创 USACO--3.3A Game+dp

一道dp,其实我们只要求出第一个人的最大和.定义sum[i][j]表示区间i,j所有元素之和.dp[i][j]表示从面对区间i,j时先取所能得到的最大和. 状态转移方程: dp[i][j]=max(sum[i+1][j]+a[i]-dp[i+1][j],sum[i][j-1]+a[j]-dp[i][j-1]). 可以化简成: dp[i][j]=sum[i][j]-min(dp[i+1][j],dp[

2015-05-29 21:10:15 615

原创 Thinking in Java--抽象类与接口

记得上次阿里二面的时候就问了抽象类和接口的问题,当时回答的不太全面.这次又学到了这里,就做一个比较详细的总结. 一.抽象类与接口的定义   抽象类与接口都是java中一种更高层次上的抽象. 抽象类:我们用abstract关键字定义抽象类和抽象方法,抽象方法指的是只有定义没有实现的方法,并且规定如果一个类包含一个或者多个抽象方法,则一定要声明为抽象类.抽象类中也可以包含普通的方法,甚至完全没有抽象方

2015-05-27 11:24:08 1266

原创 USACO3.3--Shopping Offers

如果我们将每一种优惠方案看成一种物品,那么这个问题就可以转换成背包问题,我们可以定义dp[a1][a2][a3][a4][a5]表示购买第一到第五中物品ai个时的最小代价,然后转移方程类似于完全背包dp[a1][a2][a3][a4][a5]=min(dp[a1-st[i].num[a1]][a2-st[i].num[a2]…[a5-st[i].num[a5]);但是这样还不够,因为根据题目要求其实

2015-05-26 23:36:14 603

原创 Thinking in Java---多态初探

继承,封装,多态是面向对象程序设计中的三大特性.其实从某种成都上讲继承和封装都是在为多态做准备,下面我们来了解多态这个重要的概念及其实现原理. 一.什么是多态 所谓的多态就是指允许不同类的对象对同一消息做出响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式。(发送消息就是函数调用). 我们知道java支持向上转型,所以对于从同一个基类继承而来的子类,我们都可以把其对象当

2015-05-26 15:50:11 1150

原创 CSUOJ1630--Plane Ticket Pricing

类似于背包,但是最后物品可以拆分.另外,因为要求第一次的选择,从后往前进行dp.代码如下:#include<iostream>#include<cstdio>#include<cstring>using namespace std;#define INF 0x3f3f3f3ftypedef struct{ int cnt; int w[103],v[103];}P;P

2015-05-25 18:20:29 429

原创 CSUOJ--1633 Landline Telephone Network

其实就是一道最小生成树的题目.我们只需要将坏点排除在外,然后对其它点做一次最小生成树,然后在将坏点连接到这颗生成树上(每次都选代价最小的点).当然如果最后不是所有的点都连接到一起,就是impossible了. 还有一种情况需要特判,就是如果一共只有两个点,并且都是坏点,这种情况也是合法的.代码如下:#include<iostream>#include<cstdio>#include<algor

2015-05-24 20:32:23 660

原创 Thinking in Java ---final关键字总结+初始化和类的加载

final关键字既可以用来修饰基本变量,引用也可以用来修饰方法和类。在修饰不同的对象时有不同的含义,很容易搞混淆,在此做一个小结。了解一下继承情况下变量的初始化和类的加载机制,也能让我们对程序运行时发生的一切有一个全局性的把握。一。final关键字 1.1 final关键字修饰变量 final关键字类似于C++中的const关键字,当它修饰基本变量时表明该变量一旦被初始化为

2015-05-21 23:00:44 2052

原创 UVALive 6439--Pasti Pas!

因为它要求的是最长的回文串,我们一方面从前往后走,一方面从后往前走,当某次得到一个相同的部分就看成一个整体,这样就可以得到最长的一个回文串.然后的问题就是如果判断我们枚举的前后两个部分的字符串是否是一样的,我们当然可以暴力判定,但是这样肯定回超时,所以我们采用字符串hash的方法进行判断.代码如下:#include<iostream>#include<cstring>#include<cstdi

2015-05-21 21:01:35 1097

原创 Thinking in Java--吸血鬼数字

吸血鬼数字是指位数为偶数的数字,可以用一对数字相乘得到,而这对数字个包含乘积一半位数的数字,其中从最初数字中选取的数字可以任意排序.以两个0结尾的数字是不允许的. 写一个程序求出4位数字中的所有吸血鬼数字.其实就是一个简单的dfs.我们可以将原数字的各位提取出来,然后在去填充新的两个数.如果可以得到两个新数的乘积恰好为原数,则这个数字是吸血鬼数字.下面的代码中IsVampire类提供判断一个数字是

2015-05-19 22:30:19 903

原创 USACO--3.2Sweet Butter+推优化的Dijkstral算法

这个题目思路是很简单的,我们只需要枚举每个定点作为目的地,然后再取其中距离总和最小的作为答案.开始的时候我用的是floyd一次就将所有点之间的最小距离求出来,但是超时了. 后面用的每次枚举一个点就用堆优化的求一次这个点到其余点的最短路,这样就可以过了.代码如下:/*ID: 15674811LANG: C++TASK: butter*/#include<iostream>#include<

2015-05-19 20:09:25 648

原创 USACO3.2--Magic Squares+经典搜索

类似于八数码的一道经典搜索题,思路基本也一样.我是用康拓展开进行的判重.代码如下:/*ID: 15674811LANG: C++TASK: msquare*/#include<iostream>#include<cstdio>#include<cstring>#include<queue>#include<algorithm>using namespace std;#define

2015-05-19 09:44:45 691

原创 USACO--3.2Feed Ratios

WF上的水题,直接模拟即可.注意为0情况的处理,我写的有点复杂了.代码如下:/*ID: 15674811LANG: C++TASK: ratios*/#include<iostream>#include<cstdio>#include<cstring>using namespace std;#define INF 0x3f3f3f3fint xx[5],yy[5],zz[5],k4,s

2015-05-18 21:50:17 758

原创 USACO3.2--Spinning Wheels

题目的关键在于360秒后,所有的轮子都会回到原位.然后就可以暴力模拟每一秒的的情况了,因为是周期性还要注意一些细节需要注意.代码如下:/*ID: 15674811LANG: C++TASK: spin*/#include<iostream>#include<cstdio>#include<cstring>using namespace std;typedef struct{

2015-05-18 14:02:11 779

原创 CSUOJ1206--Card game

如果我们可以求出两个人n张牌取k张的所有情况,问题就会变成一个简单的排列问题:A获胜的概率=A k张牌比B k张牌大的情况/总情况.然后我们可以用dp处理出n张牌中取k张牌的所有情况,dp[i][j][k]表示前i张牌中取j张牌构成k点的情况数, 状态转移:dp[i][j][k]=dp[i-1][j][k]+k>=a[i]?dp[i-1][j-1][k-a[i]]:0; 然后就是在计算概率时因为

2015-05-16 22:29:50 708

原创 CSUOJ1238--兵临城下

这个题目的难点在于p操作时快速确定没预热炮中的最小编号.我是用线段树为每门炮维护了一个最后可开炮时间,然后每次需要预热一门炮时就用二分加线段树查询满足要求的最小编号.要注意如果一门炮可以开炮时间的结尾恰好是我们查询的时间,我们也要将其看成不可以开炮需要重新预热的(我就在这WA了好几发).代码如下:#include<iostream>#include<cstdio>#include<cstring

2015-05-16 17:09:06 667

原创 CSUOJ1230--平面上的点

题目大意: 对于给定的整数a,b,c,d,及整数x1,x2,y1,y2,z1,z2,求有多少个满足x1<=x<=x2,y1<=y<=y2,z1<=z<=z2且x、y、z均为整数的点在平面ax+by+cz+d=0上。如果我们枚举z,则问题变成了ax+by=c有多少个解的问题. 这就是一个扩展欧几里得的模板题了.但是有两个地方值得注意:首先我们要保证a,b,c这三个参数必须为正.然后是在利用通解公式求

2015-05-15 17:34:08 796

原创 CUSOJ1170--A Simple Problem

这个题目如果直接暴力枚举连续子区间是肯定会超时的;其实枚举子区间的时候会有很多重复的计算,我们可以利用这个性质.假设我们现在我们枚举起点为i,终点为j-1的区间是满足要求的,但是由于a[j]的值大于最大值或小于最小值,导致Max-Min>k,那么如果我们是暴力枚举的话,我们会将起点设为i+1然后继续枚举,但是其实如果a[i+1]点的值没有改变最大值或最小值则区间的终点仍然是j,不会得到一个更优的解.

2015-05-15 16:13:17 616

原创 扩展欧几里得算法

证明:设 a>b。 推理1,显然当 b=0,gcd(a,b)=a。此时 x=1,y=0;//推理1 推理2,a*b!=0 时 设 ax1+by1=gcd(a,b); bx2+(a mod b)y2=gcd(b,a mod b); 根据朴素的欧几里德原理有 gcd(a,b)=gcd(b,a mod b); 则:ax1+by1=bx2+(a mod b)y2; 即:ax1+by1=bx2+

2015-05-14 23:02:22 728

深入浅出MyBatis

深入浅出mybatis这本书详细的描述了如何使用mybatis作为数据层半持久化框架

2018-06-07

空空如也

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

TA关注的人

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