#include<iostream>
#include<time.h>
#include<vector>
using namespace std;
int min(int a,int b){//比较大小的函数 **algorithm库的min函数用不了==
if(a<b){
return a;
}else{
return b;
}
}
int minSum(vector<vector<int> >& triangle){//求最小总和的函数
vector<int> dp(triangle.back());//复制最后一行作为动态规划数组的初始值
for(int i=triangle.size()-2;i>=0;i--){//从等边三角形倒数第二行开始
for(int j=0;j<=i;j++){//取当前数和下一列相邻两个数的较小值作为当前数的最小求和
dp[j]=min(dp[j],dp[j+1])+triangle[i][j];
}
}
return dp[0];
}
void main(){
srand((unsigned)time(NULL));
int n;
cout<<"请输入底边数的个数:"<<endl;
cin>>n;
vector<vector<int> > triangle(n, vector<int>(n));//定义一个二维vector存储等边三角形
for(int i=0;i<n;i++){
for(int j=0;j<=i;j++){
triangle[i][j]=1+rand()%9;
cout<<triangle[i][j]<<" ";
}
cout<<endl;
}
int min=minSum(triangle);
cout<<"最小总和为:"<<min<<endl;
}