codevs1048 石子归并 动态规划dp

今天药忘吃喽~ 2024-02-17 19:26 131阅读 0赞
  1. #include<iostream>
  2. #include<cstring>
  3. using namespace std;
  4. int n,a[1000]={0},dp[1000][1000]={0},s[1000]={0};
  5. int main(){
  6. cin>>n;
  7. memset(dp,11,sizeof(dp));
  8. for(int i=1;i<=n;i++){
  9. cin>>a[i];
  10. s[i]=a[i]+s[i-1];
  11. dp[i][i]=0;
  12. }
  13. for(int i=2;i<=n;i++)
  14. for(int j=i-1;j>=1;j--)
  15. for(int k=j;k<i;k++)
  16. dp[j][i]=min(dp[j][i],dp[j][k]+dp[k+1][i]+s[i]-s[j-1]);
  17. cout<<dp[1][n];
  18. }

发表评论

表情:
评论列表 (有 0 条评论,131人围观)

还没有评论,来说两句吧...

相关阅读

    相关 51nod 1021石子归并 dp

    N堆石子摆成一条线。现要将石子有次序地合并成一堆。规定每次只能选相邻的2堆石子合并成新的一堆,并将新的一堆石子数记为该次合并的代价。计算将N堆石子合并成一堆的最小代价。

    相关 51nod1021石子归并(区间dp

    题意:N堆石子摆成一条线。现要将石子有次序地合并成一堆。规定每次只能选相邻的2堆石子合并成新的一堆,并将新的一堆石子数记为该次合并的代价。计算将N堆石子合并成一堆的最小代价。