状态:问题当前所处的局面

转移:状态之间的关系

阶段:计算状态的顺序

一维DP优化:

for(int i=1;i<=n;i++){

int pos=lower_bound(g+1,g+len+1,a[i]);

g[pos]=a[i];

len=max(len,pos);

}

完全背包 ——> 多重背包:

能选此物品这个物品最多能选的次数

分组背包(组内互斥)

for(int k=1;i<=组数;i++)

{
for(int i=背包容量;i>=0;i++)
{
for(int j=1;j<=小组物品数;j++)
{
if(i>=w[j]) dp[i]=max(dp[i-1],dp[i-w[j]]+v[j])
}
}
}
区间DP:

for(int len=2;len<=n;len++) (区间长度)

{

for(int i=1;i<=n-len+1;i++) (端点)

{

 int j=i+len-1;
	
 for(int k=i;k<j;k++) (分割点)
	
    {
		
        dp[i][j]=min(dp[i][j],dp[i][k]+dp[k+1][j]+sum[j]-sum[i-1]);
	
    }

}

}

posted on 2024-03-21 15:12  Grylls_117  阅读(21)  评论(0编辑  收藏  举报