解题思路:一开始的思路是分单双行,每行求一个最大,单双行分别求和。对每行求最大,对每一个位置有可能空一个位置不选,有可能空两个位置不选,但不会空三个,否则一定会加上中间的值。对每一行搜索不行,线性的存储搜索不浪费么?200000的数据只能是dp了吧。后来发现每行都求最大值之后,对列也要用同样的状态转移方程求最大值。
状态转移方程:dp[j]=max(dp[j-2]+a[j],dp[j-1]);
//动态规划赋初值的时候切记不要赋错。例如这道题,dp[2]可能=dp[1];
//至于下标越界什么情况我也不造。。。为了节约时间,c与c++没有严格审查数组下标越界问题
数组下标为-1的地址对于数组来说是越界访问了,但是这个地址是有意义的
这个地址就是所申请的数组存储空间的首地址的向前偏移一个单位(也就是偏移一个当前数组类型所对应的字节数)所对应的地址。
这个地址由于没有跟着数组空间一起初始化,
所以其中的数据是不一定的,
如果是正在被系统或者其他APP使用中的地址空间,那么可以被访问,其中的数据的意义取决于被系统或者其他APP所写入的数据,但是访问后,有可能会引起系统或者其他APP异常。
如果是没有被使用的地址,那么就是一个野地址,那么其中的数据是随机的,无意义的
以上是从网上找的答案
hdu2845
时间: 2024-10-24 20:08:44