一、01背包
有N件物品和一个容量为V的背包。第i件物品的价格(即体积,下同)是w[i],价值是c[i]。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。
这是最基础的背包问题,总的来说就是:选还是不选,这是个问题<( ̄ˇ ̄)/
相当于用f[i][j]表示前i个背包装入容量为v的背包中所可以获得的最大价值。
对于一个物品,只有两种情况
情况一: 第i件不放进去,这时所得价值为:f[i-1][v]
情况二: 第i件放进去,这时所得价值为:f[i-1][v-c[i]]+w[i]
状态转移方程为:f[i][v] = max(f[i-1][v], f[i-1][v-w[i]]+c[i])
二、DAG
对于DAG最长(短)路,有两种“对称”的状态定义方式:
状态1:设d(i)为从i出发的最长路,则d(i)=max{d(j)+1|(i,j)∈E}
状态2:设d(i)为以i结束的最长路,则d(i)=max{d(j)+1|(j,i)∈E}