总结
其实我觉得这次的比赛有做的好的也有走的不好的,还是暴露了许多问题。
第一题:
DaA 和他的朋友组成一个团队去旅行了。他们每个人都准备了一个背包,用来装旅行用的物品。他们的背包有两个特点:
1. 每个人的背包能装无限多的物品,每种物品有一个价值,但只能装一件;
2. 每个人都很有个性,所以每个人的背包不会完全相同。
DaA 的团队中有M 个人,那么对于整个团队,背包价值和最大是多少呢?
30%的数据 1<=M,N<=15。
60%的数据 1<=M<=200,1<=N<=100。
100%的数据 1<=M<=1,000,000,1<=N<=500,0< wi<=50。
输出请注意使用64 位整数(Pascal 中的Int64,C++中的long long)。
首先我看到第一题,居然以为是第三题,还差点想死啃了。。。
所以我马上想到了一些比较麻烦的方法——堆,因为之前有一道题目很像。。
但是我意识到这是第一题时,然后我再看了看样例解释:
19=(2+7+1)+(2+7)
58=(1+2+3+4)+(2+3+4)+(1+3+4)+(1+2+4)+(3+4)+(1+2+3)+(2+4)+(2+3)
然后我们可以倒着想,每个序列都可以是总和减去一些数
所以我们可以用简单的背包统计n个数可以构成x的方案,然后就从小到大枚举x,计算x对答案的贡献。
方程:f[i,j]=f[i-1,j]+f[i,j-a[i]]其实这个方程推的时候我想了一会,然后根据上次noip的教训,最终列出来了。。。
然后就搞出来。。其实也比较波折的。
第二题:搜索题,但是我却耗了大量时间所以导致11:00才搞定。。
第三题:其实我是有能力做出来的,但是由于第二题的细节把我智商卡掉了。。所以又休息了一下,便只好暴力了,60。。。
但我又犯了一个毛病——忘了分析题目答案的特性,和搜索的方向
若我发现枚举第二个数会和最终的第n项有关系——第二个数越大,第n项也就越大。。
故二分。。
这是方法一,方法二:
把系数化为整数时,我们可以尝试代入,消元,就得到了这个规律了。。。
所以还是要多思考,多尝试。
这题则暴露了我没有合理分配时间,搜索要最后打!否则打完搜索便没时间打其他正解了。
当然这就关系到我对题目的难度的认知了,还是要多做题。。。