zoukankan      html  css  js  c++  java
  • 合并石子

    代码是参考ACdreamers敲的。

    相邻石子合并,找最小代价。

     1 #include <cstdio>
     2 #include <algorithm>
     3 using namespace std;
     4 
     5 int a[110];
     6 int dp[110][110];
     7 int sum[110];
     8 int n;
     9 
    10 int getmin()
    11 {
    12     for(int i=0;i<=n;i++)
    13         dp[i][i]=0;
    14     for(int v=1;v<n;v++)//v所代表的是当合并间隔为v的时候,遍历全部石子,找俩俩石子合并需要的最小代价。v的范围是[0,n-1]
    15     {
    16         for(int i=0;i<n-v;i++)//找[i,j]这个区间内的最小代价,当然,i的范围是[0,n-v-1];
    17         {
    18             int j=i+v;
    19             dp[i][j]=0xffffff;
    20             int temp=sum[j]-(i>0 ? sum[i-1] : 0);//求[i,j]区间内的所有石子的和。sum[j]-sum[i].
    21             for(int k=i;k<j;k++)
    22                 dp[i][j]=min(dp[i][j],dp[i][k]+dp[k+1][j]+temp);这 就是递推式的含义了
    23         }
    24     }
    25     return dp[0][n-1];
    26 }
    27 int main()
    28 {
    29     scanf ("%d",&n);
    30     for(int i=0;i<n;i++)
    31         scanf ("%d",&a[i]);
    32     sum[0]=a[0];
    33     for(int i=1;i<=n;i++)
    34     {
    35         sum[i]=sum[i-1]+a[i];
    36         //printf("%d %d
    ",sum[i],i);
    37     }
    38     printf("%d
    ",getmin());
    39     return 0;
    40 }
  • 相关阅读:
    centos6.5下的mysql5.6.30安装
    mysql常见错误
    fpm打包redis3.0.7
    centos6.5安装fpm打包工具
    centos6.5安装flume
    centos6.5 安装mono
    利用rsyslog 对linux 操作进行审计
    CentOS7修改服务器主机名方法
    CentOS 7 修改网卡名称为eth
    keepalived配置日志
  • 原文地址:https://www.cnblogs.com/bei-insomia/p/4556574.html
Copyright © 2011-2022 走看看