foj 1004 Number Triangle
好久没更新了。
网站
题意很好理解,就是从头加到尾,看哪个比较大,将值输出出来。
我这边主要运用动态规划,
重新设一个数组用来存总和,选择其中大的加起来。
最后输出最后一行的最大值
主要要注意题目的范围大小
#include<iostream>
using namespace std;
int a[1001][1001];
int b[1001][1001];
int main()
{
int n;
int i,j;
int max=0;
while(cin>>n)
{
for(i=0;i<n;i++)
for(j=0;j<i+1;j++)
{
cin >> a[i][j];
}
b[0][0]=a[0][0];
for(i=1;i<n;i++)
{
for(j=0;j<=i;j++)
{
if(j==i)
{
b[i][j]=a[i][j]+b[i-1][j-1];
}
else if(j==0)
{
b[i][j]=a[i][j]+b[i-1][j];
}
else
{
b[i][j]=(b[i-1][j]>b[i-1][j-1]) ? b[i-1][j]+a[i][j]:b[i-1][j-1]+a[i][j];
}
}
}
for(i=0;i<n;i++)
{
if(b[n-1][i]>max) max=b[n-1][i];
}
cout << max<<endl;
for(i=0;i<n;i++){
for(j=0;j<i+1;j++)
{
a[i][j]=0;
b[i][j]=0;
}
}
max=0;
}
return 0;
}
浙公网安备 33010602011771号