今天,我们来讨论讨论提高组的动态规划。
动态规划
动态规划有好多经典的题,有什么背包问题、正整数拆分、杨辉三角……但是,如果考到陌生的题,怎么办呢?比如说2000年提高组的乘积最大、石子合并……,所以说,我们要理解动态规划的本质。
那么,我们动态规划的第一步就是状态定义
dp的第二步就是填表格、写状态转移方程。
最后一步就是根据状态转移方程写代码了。其实,我觉得,dp最难的地方就是第二步,其次就是根据递推式写代码。给大家练一练根据递推式写代码吧。
递推1
那么,代码很简单,长这样👇
#include using NAMEspace std; int f[110][1010],n,v,c[110],w[110]; int main() { scanf("%d%d",&v,&n); for (int i=1;im; for(int i=1; i>a[i]; f[0] = 1; for(int i=0; i