#include<iostream>
#include<algorithm>
using namespace std;
int f[100][100];
int w[100][100];
int main()
{
int i,j,n;
cin>>n;
for(i = 1; i <= n; i++)
{
for(j = 1; j <= i; j++)
{
cin>>w[i][j];
}
}
for(j = 1; j <= 5; j++)
f[n][j] = w[n][j];
for(i = n-1; i >= 1; i--)
{
for(j = 1; j < n; j++)
{
f[i][j] = max(f[i+1][j],f[i+1][j+1]) + w[i][j];
}
}
cout<<f[1][1]<<endl;
return 0;
}
二维逆序;
#include<iostream>
#include<algorithm>
using namespace std;
int f[100][100];
int w[100];
int main()
{
int i,j,n;
cin>>n;
for(i = 1; i <= n; i++)
{
f[0][i] = 0;
}
for(i = 1; i <= n; i++)
{
for(j = 1; j <= i; j++)
{
cin>>w[j];
}
for(j = 1; j <= i; j++)
{
f[i][j] = max(f[i-1][j],f[i-1][j-1]) + w[j];
}
}
for(i = 0; i < n; i++)
{
w[i] = f[n][i+1];
}
sort(w,w+n);
cout<<w[n-1]<<endl;
return 0;
}
二维顺序;
#include<iostream>
#include<algorithm>
using namespace std;
int f[100];
int w[100][100];
int main()
{
int i,j,n;
cin>>n;
for(i = 1; i <= n; i++)
{
for(j = 1; j <= i; j++)
{
cin>>w[i][j];
}
}
if(n == 1)
{
cout<<w[1][1]<<endl;
return 0;
}
for(i = 1; i <= n; i++)
{
f[i] = w[n][i];
}
for(i = n-1; i >= 1; i--)
{
for(j = 1; j <= i; j++) //注意 “= ”号!!! i是上一层!!
{
f[j] = max(f[j],f[j+1]) + w[i][j];
}
}
sort(f,f+n+1);
cout<<f[n]<<endl;
return 0;
}
一维逆序;
#include<iostream>
#include<algorithm>
using namespace std;
int f[100];
int w[100][100];
int main()
{
int i,j,n;
cin>>n;
for(i = 1; i <= n; i++)
{
for(j = 1; j <= i; j++)
{
cin>>w[i][j];
}
}
f[1] = w[1][1];
for(i = 2; i <= n; i++)
{
for(j = i; j >= 1; j--)
{
f[j] = max(f[j],f[j-1]) + w[i][j];
cout<<f[j]<<" ";
}
cout<<endl;
}
sort(f,f+n+1);
if(n == 1)
{
cout<<-1<<endl;
return 0;
}
cout<<f[n]<<endl;
return 0;
}
一维顺序;
****************************************************************************************************************
有不足还望坛友们提议