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;
    }        
    

      

  • 相关阅读:
    单元测试练习
    对软件的看法
    个人最终总结
    论文笔记--Fast RCNN
    个人最终总结2
    结对编程--基于android平台的黄金点游戏(2.0版本)
    结对编程--基于android平台的黄金点游戏
    团队作业(一)
    [java]wordcount程序
    第三周作业(二)
  • 原文地址:https://www.cnblogs.com/zhangliu/p/7053430.html
Copyright © 2011-2022 走看看