2016暑假第一次测验(7-14)

时间:2020-12-13 16:40:41


一.        数学作业

这道题要求求x1+2x2+……+nxn=mn,m为输入数据)的解集的个数;

一开始我想用DPf[i,j,m]=sum{f[i,k,q]+f[k,j,m-q]},但样例都过不了。

后来想到了背包,但一时没有转过弯,以前做的背包都把物品价值给出了的,但这次却让我求价值(耸肩)。

Std就是用的完全背包,把1……n当作每个物品的价值,然后求个数使得刚好装满背包。状态转移方程:f[i,j]=f[i-1,j]+f[i-1,j-i]。即决定第i件物品装不装入。可变为一维数组f[j]=(f[j]+f[j-i])%1000000000;

二.        n!后有多少0

一个数的阶乘里要出现后缀0,则必须要有2*52肯定是要比5多的,即要求1*2……*n里可以分出多少个5

   1.可以用DPf[1]=0;f[i]=f[i-1]+i里的5的个数

   2.5的个数=(i/5)+(i/5/5)+……;

Eg100/5+100/5/5(=4<5)=24;(原理不知(耸肩))

三.        架设电话线

二分答案加SPFA,从1~100000开始二分,然后SPFA,比mid大的设为1,否则设为0,然后求最短路,若比k大则往右边二分,否则往左边二分。