区间DP好题
#include<cstdio>
#include<cstring>
#include<algorithm>
#define inf 100000000
using namespace std;
int num[110],sum[110],dp[110][110];
int main(){
int t,T,n;
int l,i,j,k;
scanf("%d",&T);
for(t=1;t<=T;t++){
scanf("%d",&n);
sum[0]=0;
for(i=1;i<=n;i++){
scanf("%d",&num[i]);
sum[i]=sum[i-1]+num[i];
}
memset(dp,0,sizeof(dp));
for(i=1;i<=n;i++)
for(j=i+1;j<=n;j++)
dp[i][j]=inf;
for(l=1;l<=n;l++)
for(i=1;i<=n-l+1;i++){
j=i+l-1;
for(k=1;k<=l;k++){
dp[i][j]=min(dp[i][j],k*(sum[j]-sum[i+k-1])+dp[i+k][j]+num[i]*(k-1)+dp[i+1][i+k-1]);
}
}
printf("Case #%d: %d\n",t,dp[1][n]);
}
}
想法参考http://blog.youkuaiyun.com/acm_cxlove/article/details/7964594
本文介绍了一道经典的区间动态规划问题,并提供了完整的C++代码实现。通过对问题的深入分析,文章展示了如何通过动态规划求解最优解的过程。适用于对动态规划有一定了解并希望提升解决区间DP问题能力的读者。
3896

被折叠的 条评论
为什么被折叠?



