• 石子合并(一)


    真是动态规划的  题型千千万  .  

     1 #include<stdio.h>
     2 #include<string.h>
     3 #include<math.h>
     4 #include<iostream>
     5 #include<algorithm>
     6 #include<queue>
     7 #include<vector>
     8 #include<set>
     9 #include<stack>
    10 #include<string>
    11 #include<sstream>
    12 #include<map>
    13 #include<cctype>
    14 #include<limits.h>
    15 using namespace std;
    16 #define N 205
    17 int sum[N],stone[N],dp[N][N];
    18 int main()
    19 {
    20     int n;
    21     while(scanf("%d",&n)!=EOF)
    22     {
    23         sum[0]=stone[0]=0;
    24         for(int i=1;i<=n;i++)
    25         {
    26             scanf("%d",&stone[i]);
    27             sum[i]=stone[i]+sum[i-1];           //   这种思想真是一种好东西   //   一维线性 搜索的时候 用这个也能节省超级多的时间  ..  
    28         }
    29         memset(dp,0,sizeof(dp));        //  先将 所有的  全归零  
    30         for(int d=1;d<n;d++)                      //             距离   ,   确定两两相隔的 距离  
    31             for(int i=1;i<=n-d;i++)     //  从  1 开始 一一确定 .  
    32         {
    33             int j=d+i;          //  开始 确定两个  距离的 坐标  
    34             dp[i][j]=INT_MAX;           //    先 默认 距离最大   . 
    35             int add=sum[j]-sum[i-1];           //  确定这两个数字  之间的 相差  的  知  
    36             for(int k=i;k<j;k++)     //    两个数字  之间错的  坐标 一个个  更新确定  .
    37                 dp[i][j]=min(dp[i][j],dp[i][k]+dp[k+1][j]+add);
    38         }
    39         printf("%d
    ",dp[1][n]);
    40     }
    41     return 0;
    42 }
  • 相关阅读:
    v-chart使用的相关实例
    v-chart从后台获取数据
    算法题-单词搜索
    关于前端开发的一些小经验总结
    element的input中加入可点击的按钮
    vue.js的入门
    链表问题(算法题)
    同构词分类
    最长不降序子列的改编(dp数组的使用)
    Ubuntu安装Git
  • 原文地址:https://www.cnblogs.com/A-FM/p/5467005.html
Copyright © 2020-2023  润新知