二模 (9) day2

第一题:

题目大意:求满足条件P的N位二进制数的个数。P:该二进制数有至少3个0或者3个1挨在一起。。 N<=20000

 

解题过程:

1.一开始直接写了个dfs把表打了出来,不过没发现什么规律,然后就尝试着反过来想,先求出不满足条件P的个数,然后总个数减一下。然后就把2^N-ans输了出来,结果发现是个斐波那契数列。(打表大法好啊)

2.如果直接写高精度是要超时并且爆空间的。。所以要用滚动数组并且万进制优化(实际上我用了16位数字压成一个long long),貌似20000的数据万进制还是太慢。另外第一次写压位的高精度,原来要注意输出的时候不够位的要补0。

 

下面给出为什么不满足P的个数是一个斐波那契数列:

A:如果最后2位相同,那么只要前N-2位满足条件P即可(若第N-2位是0,那么N-1,N-2必须是1,反之亦然);

B:如果最后2为不相同,那么只要前N-1位满足条件P即可(若第N-1位是0,那么不管第N-2位是啥,只要第N位是1就好,反之亦然);

综上F[n]=F[n-2]+F[n-1]。

做出这题不难,不过这个递推式还是不大容易理解。

 


 

第二题:

题目大意:给出数轴上N辆车和每辆车的速度,求超车的总次数。

 

解题过程:

1.其实就是求逆序对。一种方法是归并排序,另外一种是树状数组。就当复习了一次树状数组吧。

 

 


 

第三题:

题目大意:给出N个点M条边的有向图,求从1到N的一条路径,要求如果存在权值为正,那么应该尽可能小并输出正权值,如果不存在权值为正的路,那么负权值也应该尽可能小。n≤100,m≤20000。 每条边的权值绝对值小于10.

 

解题过程:

1.状态为二维的最短路,只要修改一下spfa算法,记录d[i][j]表示到点i,权值为j的路径能否达到。

转移的时候d[k][j+w[i][k]]=d[i][j]。

原文地址:https://www.cnblogs.com/vb4896/p/4020111.html