泥点spot
Spot
描述
有n个泥点,排成一排,第i个泥点坐标为ai。有m个木板,第i个木板长为li。现在用尽可能少的木板覆盖所有泥点。
问:使用木板的最少数量以及最优方案数(mod 1000000007),若不能完全覆盖,请输出“NO”。
注意:
泥点可重复覆盖,木板可重叠。
计算方案时,长度相等的两个板不等价,视为两种板。
输入
第1行:一个数n
第2行:n个数a1,a2…an(从小到大给出)
第3行:一个数m
第4行:m个数l1,l2…ln
输出
第1行,一个数,使用木板的最少数量
第2行,一个数,最优方案数
若不能完全覆盖,请输出“NO”
样例输入
1
0
1
10
样例输出
1
10
数据范围和约定
对于20%的数据:n=1
对于另外20%的数据:m=1
对于100%的数据:
1<=n,m<=15
0<=ai<=1000000000
1<=li<=1000000000
时空限定
内存限制为 512 MB
时间限制为 1 s
评测环境和细则
评测开启-O2优化
评测软件为lemon
评测忽略行尾空格
文件名
提交文件名为spot.cpp/pas
输入文件名为spot.in
输出文件名为spot.out
n,m<=15,先确定是状压
一开始f[i][j],i表示前i个木板,j压的是泥点
再用g[i][j] 在dp的时候记录方案数
但是要考虑的情况会多到爆炸
在卡了一个下午后,本蒟蒻毅然决然的决定 换!状!态!!!!
用f[i][j],i表示前i个泥点,j压的是木板,f[i][j]表示方案数
初始化成负数
最后再扫一遍f[n][0-maxp],找不是负数中最小的,没找着就输出”NO”
这样比以前的好处是:
泥点最后一定要全都选完,但木板不一定,比较好转移。
错误的第一次code