zoukankan      html  css  js  c++  java
  • nyoj 737 石子合并(一)

    石子合并(一)

    时间限制:1000 ms  |  内存限制:65535 KB

    难度:3

    描述

        N堆石子排成一排,每堆石子有一定的数量。现要将N堆石子并成为一堆。合并的过程只能每次将相邻的两堆石子堆成一堆,每次合并花费的代价为这两堆石子的和,经过N-1次合并后成为一堆。求出总的代价最小值。

    输入

    有多组测试数据,输入到文件结束。
    每组测试数据第一行有一个整数n,表示有n堆石子。
    接下来的一行有n(0< n <200)个数,分别表示这n堆石子的数目,用空格隔开

    输出

    输出总代价的最小值,占单独的一行

    样例输入

    3

    1 2 3

    7

    13 7 8 16 21 4 18

    样例输出

    9

    239

    #include<string.h>
    #include<stdio.h>
    #include<algorithm>
    using namespace std;
    #define INF 0x3fffffff
    int a[205],dp[205][205],sum[205];
    int main()
    {
    	int n,i,j;
    	while(scanf("%d",&n)!=EOF)
    	{
    		sum[0]=0;
    		for(i=1;i<=n;i++)
    		{
    			scanf("%d",&a[i]);
    			dp[i][i]=0;
    			sum[i]=sum[i-1]+a[i];
    		}	
    		for(int L=2;L<=n;L++)
    			for(i=1;i<=n-L+1;i++)
    			{
    				j=i+L-1;
    				dp[i][j]=INF;
    				for(int k=i;k<=j;k++)
    					dp[i][j]=min(dp[i][j],dp[i][k]+dp[k+1][j]+sum[j]-sum[i-1]);
    			}
    		printf("%d
    ",dp[1][n]);
    	}
    	return 0;
    }        
    

      

  • 相关阅读:
    Variant 数组
    socket c/s分佈式編程
    多線程幾個方法說明
    hash表的使用
    MIS系统权限控制的一个简便方法
    git 使用总结
    让 VAGRANT 启动并运行起来
    深入理解 Laravel 中 config 配置加载原理
    Vagrant入门
    php开发APP接口(总结一)
  • 原文地址:https://www.cnblogs.com/zhangliu/p/7053430.html
Copyright © 2011-2022 走看看