一模 (5) day1

第一题:

题目大意:求出1-10^n 这些数中,包含数字3的有多少个。 n<=1000;

解题过程:

1.这题一看就是高精度+递推。。如果n=1000,那么假设个位是3,其他999位任意。。那么就有10^999个数了。

2.用F[i] 表示 所有位数为 i的数中 有多少个包含3的,g[i] 表示 1-10^i 中有多少个包含3的。

显然 g[i]=sum(F[1...i]) ;F[i]的转移需要分类讨论:

A:第i位是3,那么有10^(i-1)个数字。

B:第i位不是3,那么第i位有8种选择,剩下的数有g[i-1]种方案,一共8*g[i-1];

所以F[i]=8*g[i-1]+10^(i-1);

另外在求10^(i-1)的时候,我用了(int)pow(10,i-1),结果却得到:

(int)pow(10,1)=10

(int)pow(10,2)=99

(int)pow(10,3)=1000

(int)pow(10,4)=9999;

原来pow返回的是一个实数,实际存储的时候 10000 就是9999.99999999...99 强转成int 就会损失精度。

吸取个教训。

第二题:

题目大意:选取和不超过S的若干个不同的正整数,使得所有数的约数(不含它本身)之和最大。S<=1000

解题过程:

1.水题。。把每个数的约束和计算出来就变成一个裸的01背包问题。

第三题:

题目大意:求最大二分图匹配。。

解题过程:

1.果断不会做,果断爆搜,果断骗到30分。。把匈牙利算法琢磨透了再补上。

上一篇:【LibreOJ】#6298. 「CodePlus 2018 3 月赛」华尔兹 BFS


下一篇:数据结构练习2021-3-9