好题
【NOIP2000提高】乘积最大 需要用到高精度,目前还不会。
【NOIP2006提高组】能量项链
【NOI1995】石子合并 经典区间DP
【POJ1141】Brackets Sequence 括号匹配
区间DP总结
值得细看的博客、动态规划之区间DP专题
1、石子合并题目:区间DP模板。
#include<bits/stdc++.h>
#define N 101
using namespace std;
int n,a[2*N],f[2*N][2*N],dp[2*N][2*N],sum[2*N];
int main()
{
cin>>n;
memset(f,0x3f,sizeof(f));
for(int i=1;i<=n;i++) {
cin>>a[i];
a[i+n]=a[i];
f[i][i]=f[i+n][i+n]=0;
}
for(int i=1;i<=2*n;i++){
sum[i]=sum[i-1]+a[i];
}
for(int len=2;len<=n;len++){//枚举长度
for(int i=1;i<=2*n-len+1;i++){//确定左右端点
for(int j=i;j<i+len-1;j++){//确定分开点
f[i][i+len-1]=min(f[i][i+len-1],f[i][j]+f[j+1][i+len-1]);//决策
dp[i][i+len-1]=max(dp[i][i+len-1],dp[i][j]+dp[j+1][i+len-1]);//决策
}
f[i][i+len-1]+=sum[i+len-1]-sum[i-1];
dp[i][i+len-1]+=sum[i+len-1]-sum[i-1];
}
}
int ans1=1000000000,ans2=0;
for(int i=1;i<=n;i++){
ans1=min(ans1,f[i][i+n-1]);
ans2=max(ans2,dp[i][i+n-1]);
}
cout<<ans1<<endl<<ans2<<endl;
}
类似的题目能量项链
今日总结
今天没看多少题,通过看博客学习了复习了之前学的区间DP,以前学的有点差劲,现在再学一遍感觉好了很多。可能快开学了,最近注意力有点不集中,老是开小差,希望明天能够沉下心来学习。