题目:
https://s3.amazonaws.com/codechef_shared/download/translated/SNCKEL16/mandarin/RWALK.pdf
这题可以转化成背包。
L,R什么的可以无视,因为替换他们不用时间。
将竖直方向和左右方向分成两个数组。
分别求出他们的和sum1,sum2。将其转化成背包,看成sum1的背包最多可以选多少个(长度和*2),因为要回到原点所以是长度和*2。
DP跑的时间比较久(2500+ms),用bitset(300+)优化一下(刚学的bitset,所以记下来…然而不懂为什么可以快那么多)
DP代码:
int DP(int *p,int n)
{
memset(dp,0,sizeof(dp));
int sum=0;
for(int i=0; i<n; i++) sum+=p[i];

该博客探讨了一道可以转化为背包问题的题目,并介绍了如何利用bitset进行优化以提高算法运行速度。博主通过将问题分解为两个数组,分别计算它们的和,然后转化为背包问题,寻找能选的最大数量。原始的DP解决方案耗时较长(约2500毫秒),而采用bitset后,时间降低到了300毫秒。尽管博主对bitset的加速原理仍不完全理解,但表示会继续学习探索。
最低0.47元/天 解锁文章
487

被折叠的 条评论
为什么被折叠?



