7月解题日志B

July_18 

POJ3649 

模拟题。 

这个题加深了我对于模拟题的理解。 

关键在于读懂题意,思路清晰。 

这个题目的关键在于理解题,然后计算移动:先计算每个图形的最左最右位置,再把
每一格把所有的图形按规则计算向左移动的格数,然后再根据移动的最左坐标建立新
图像,最后根据规则去掉不输出的前导后续空白输出,一直在做算术。







July_22 

POJ3662 

  这个题目很好。 

  题目意思是对于一个图求一条从源点到终点的路径满足:第k+1长的边最短。 

  当时想了半天也只想到优先队列广搜,结果自己代码能力挫+比赛中还有另一题卡
着,没有做出来(这样是可以的,NUDT的Alpc55就这么过了,代码能力牛!)。 

  后来晚上想到二分一个len,然后把距离大于len的边全部赋值为0(其实就是作
Dijstra的时候判断),小于的赋值为1,求最短路是否与k的关系。 

  图模型的转换博大精深……




July_23 

POJ2866 树形DP 

这个题思路没什么好说的,关键地方在于看到题目提到几何坐标时不要怕:这个题目
我开始时有点怕,不过看完之后一下就想到思路了——如果开始怕几何那么这个题目
就会很晚出了。





July_23 

POJ2547 No Tipping 


集合DP。 

比赛时候没做出来——当时我们估计了搜索的时间复杂度明显不行,然后还是写了! 


其实看到数据<=20应该就要敏感点地知道要集合DP了,想到这里就好办了。 

没有trick的题目:不过对数据的敏感和集合DP的思想意识要加强。 








July_23 

POJ1103 Maze 
  
     在TOJ跟ALPC做比赛的题目,当时想出来的——这个题目关键在于建图,而建
图的关键在于标号:按照题意划分区域,‘/’和‘/'分别代表不同的涉及的四个区
域的不同连接关系。 

   最后可以证明除了边界区域,一个区域与正好两个区域相连通,故建图后先从边
界区域出发dfs将所有能到达的区域标记出为访问,然后再以没有访问过的点开始
dfs走圈计数。 

  还不错的一道题。








July_23 

POJ2169 
图模型转换+最短路 

题目的模型转化思想很经典:原来给的就是一个图,但是要选择两个相邻(有边直接
相连)的顶点——一个状态,从一个状态可以依照条件通过一定步数转移到另一个合
法状态, 
求从一个初始状态到终结状态的最少步数。 

转化思想:建立一个新图,将原图的一条边转化为新图中的一个顶点,对于原图中每
个合法的转移建立一条有向边,然后在新图中求s-t最短路。 

trick:这个题比赛时我们虽然想到解法,但代码能力问题加卡其他题,并未做出此
题。 
      	赛后在TOJ将它AC后到POJ提交发现TLE,然后在ZOJ发现MLE。 
	后来发现我用了new,POJ又把卡new了,然后改成数组就过了。 
	至于ZOJ,目前还是MLE,我用了40000K左右内存,它自由32767k!可见我
的模型还不够好……   待改进. 


通过这个题的经验,又把原来卡的3013也过了。 

通过好几个题:3013 3159 2169 
发现如果遇到图论题,还是不要用new malloc的好,数组模拟指针还是快很多——
虽然没那么方便。





July_24 

POJ1885 
   线段树模型

   今天跟alpc在TOJ做比赛的题目,好题一道。

   题目的模型是现椴树,读入单词为插入节点,遇到数字后在前边找节点,再将前
边的单词复制过来到最后一个位置(当前,而且不必真的复制,直接保存一个link
就可以了),并标记找到原单词从列表中去除。 
 
  这个题有个trick:输入的文件中最多10000个单词,但是数字却非常多,最后得
到的结果单词数比10000大很多…… 




July_24 Software Company 

二分+DP。 

先二分一个时间上界T,然后DP看是否可以在T时间内做完所有子工程。 

状态表示及转移: 
f[k+1][t][i]表示前k个人都用了时间T工作,第k+1个人工作t时间时完成i个A公
司的项目时最多能完成B 
公司项目数目。 

f[k+1][0][i] = f[k][T][i]; 
f[k][t][i] = max(f[k][t-1][i], f[k][ t-cost[k][A] ][i-1], 
f[k][ t-cost[k][B] ][i]+1); 

dp好想,二分的思想很重要。
   





July_25 

POJ3666 

DP+离散化

做得很不爽的一道题——我太sb了,居然被数据蒙骗了,没有想到什么好方法,直到
比赛还剩下20多分钟才想到离散话,加上代码速度慢了点,没有写出来。 


对题意的挖掘最重要的一点在于: 

 一个点的最后高度Bi必定是A数组中的某个高度——可以证明:一个点要么保持原
有高度,要么向上或向下到最接近他的高度。 

 离散化后就是O(n^2)的DP,加点优化(记录一下前一个点的高度小于(大于)某个
高度的最小值)就好了。





Jul_27 

POJ3667 Hotel 

  很好的线段树题目——一个比赛时留下的怨念:当时大家都没想法,我试着敲这
个题目,结果TLE了。 
  
 这个题目我的想法是对的:直接维护线段树(区间树)的查找、删除、添加操作。 
 由于查找的是大于指定长度k的最左空白的连续区间,故节点有lmax,rmax,cmax三
个值,还有必要的区间长度、范围的信息(这个一个可以推另一个)。 

 TLE的原因很弱智:对于一个区间整体的覆盖或删除不必先下到子区间,等要改变
子区间时才将区间信息往下传;合并子区间也是麻烦的(不过当时写对了),细细推
敲就可以了。

  区间合并和信息下传的思想!
  



July_29 

Sudoku数独 

exact cover problem(覆盖模型) 

POJ3076 POJ2676 POJ3074 

  前段看了Knuth的Dancing Links的论文大致了解了一下阿,昨天看了下mmd的集
训论文,试着把Hust OJ上的1017那个extra Cover problem给过了,然后今天就
开始写mmd推荐的sudoku。 

  数独转化为extra cover的模型(以9*9为例): 

  行代表每个格子要填的数的可能:9*9*9 
  列代表限制条件: 81+9*9+9*9+9*9 
    //限制1:一个格子一个数 
    //限制2:一列数不重复 
    //限制3:一行数不重复 
    //限制4:一个3*3的块数不重复




Jul_30 

POJ 2252 

一阶方程求解 

重点在于对表达式求值 

由于一定不高于一阶,可以用复数的表示方法存储。 


这类题目都做出套路了:递归。 
	加深对“编译原理”的理解。 



July_30 

POJ2677 Tour 

经典DP CLRS上的题目 模拟两个人走来解 

状态设计:f[i][j](j<i) 
f[i][j] = min(f[i-1][k]+dis[k][i])  k=1,2,...,i-2  j=i-1 
f[i][j] = f[i-1][j]+dis[i-1][i] j<i-1
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值