11月26

来源:互联网 发布:米卡有软件 编辑:程序博客网 时间:2024/06/07 04:08

       这三天主要是做了两道题,看了会状态压缩dp的博客,复习了一下树型dp,首先,做的是N - Treasure Hunt II,这道题,题意是n个城市排成一行,每个城市中有vi个金币。两个人同时从同一个个城市出发,单位时间能走到相邻城市。 到达城市获取金币不耗时间,且任意时刻两人距离不可以超过m,问t个时间他们最多能获得多少金币。这个题没用树装dp来做,用的是模拟,如果 m >= t * 2,两个人两个方向一直走,否则的话两人一直向两边走指导相距m,还要判断奇偶,若m为奇数,则某人要停走一天。然后维持距离同时向左向右枚举剩余天数。然后是Blackboard Fibonacci 这道题,题意是有两个数两种操作,将两个数的和替换掉其中一个。依次下去,两种操作轮流,就是FIB数列的构造。给出操作次数N以及第 N项R,问能不能构造出这样的数列,而且要求错误次数最少。这样从刚开始来推是不现实的,要从后往前推,A>B那么前一个必然是A-B,B,而且这一步的操作肯定是和替换A-B。 这样的话枚举倒数第二项倒推回来,看是否刚好N项并记录错误的次数就好了。然后状态压缩刚刚看了几道题,有三个很实用的操作,1.判断一个数字x二进制下第i位是不是等于1。 方法:if ( ( ( 1 << ( i - 1 ) ) & x ) > 0) 将1左移i-1位。2.将一个数字x二进制下第i位更改成1。 方法:x = x | ( 1<<(i-1) )  3.把一个数字二进制下最靠右的第一个1去掉。 方法:x=x&(x-1)。

原创粉丝点击