蓝桥杯练习一
来源:互联网 发布:优化企业内部控制制度 编辑:程序博客网 时间:2024/06/08 13:37
package com.lanqiaobei.SanyueTest1;import java.util.Scanner;/* * * 动态规划1题目描述:依次从左到右给你n个数字,每次取出一个数字(这个数字不能是最两边的数字), 这个数字和它左右两边的数字(一共三个数字)相乘,累加这个数。直到最后仅剩下两个数字。 求最后累加的最小值。分析:dp。 dp[i][j] 表示把第 i 个数字到第 j 个数字之间(不包括i,j)的数字去光后得到的最小值。 设 x[i] 是第 i 个数字的值。dp[i][j] = min(dp[i][k] + dp[k][j] + x[i] * x[k] * x[j]), i + 1 <= k <= j - 1所有连续的两个数已经符合要求,即dp[i][i + 1] = 0; * * */public class GetMinArray {int max=34534534;static int[][] min=new int[100][100];static int x[]=new int[100];/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubGetMinArray gA=new GetMinArray();Scanner sc=new Scanner(System.in);System.out.println("请输入你要求的数的个数:");int n=sc.nextInt();//为数组赋值//memset(min,-1,100);for (int l=0;l<n;l++){x[l]=sc.nextInt();}//遍历数组for (int l=0;l<n;l++){for (int k=0;k<100;k++){min[l][k]=-1;}}int result=gA.getMinAToB(0,n-1);System.out.println(result);}public int getMinAToB(int a,int b){if (b-a==1){return min[a][b]=1;}if (min[a][b]!=-1) return min[a][b];for (int i=a+1;i<b;i++){int d1=getMinAToB(a,i);int d2=getMinAToB(i,b);if ((d1+d2+x[i]*x[a]*x[b])<max){max=x[a]*x[b]*x[i]+d1+d2;}}min[a][b]=max;return max;}}
- 蓝桥杯练习一
- 练习一
- 练习一
- 练习一
- 练习一
- access+asp 练习一
- 数据库练习一答案
- C++基础练习一
- XML练习(一)
- javascript练习(一)
- jQuery练习(一)
- 软件测试练习一
- 听力练习一
- c++练习一
- OpenGL小练习一
- 练习程序一
- 面试练习一
- 练习(一)
- MyEclipse内存不足配置
- 在jquery中使用$("#form").submit() 重写提交表单时不起作用
- HDU 2073 无限的路
- 2013_CSUST_3_23校内训练赛第一场【old】【hdu 3496、2191、4508、4506、2181 POJ 3264 3210 3094】
- vs2010与opencv2.2
- 蓝桥杯练习一
- get & post区别
- 国际化之struts2实现研究
- 最近自学的感受
- CVT 网易
- 乔姆斯基文法分类【0型1型2型3型文法】
- VC6.0 乱码问题解决办法
- 最前沿的十大IT编程语言
- 玩转数据