您的位置:首页 > 其它

【POJ-1163】数字三角形

2015-07-26 01:29 357 查看
一、递归法

Time : 16 MS

复杂度 : O(n2)

#include<iostream>
#include<algorithm>

using namespace std;

int number[101][101];
int savemaxsum[101][101];
int n;

int maxsum(int a,int b){
if(savemaxsum[a] != -1)
return savemaxsum[a][b];
if(a == n)
savemaxsum[a][b] = number[a][b];
else{
int x = maxsum(a + 1,b);
int y = maxsum(a + 1,b + 1);
savemaxsum[a][b] = max(x,y) + number[a][b];
}
return savemaxsum[a][b];
}

int main(){
cin>>n;
for(int i = 1;i <= n;i++)
for(int j = 1;j <= i;j++){
cin>>number[i][j];
savemaxsum[i][j] = -1;
}
cout<<maxsum(1,1)<<endl;
return 0;
}


二、递推法

Time : [b]16
MS

复杂度 : O(n2)

#include<iostream>

using namespace std;

int n;
int number[101][101];
int *maxsum;

int main(){
cin >> n;
for(int i = 1;i <= n;i++)
for(int j = 1;j <= i;j++)
cin >> number[i][j];
maxsum = number
; //maxsum指向底层
for(int i = n - 1;i >= 1;i--)
for(int j = 1;j <= i;j++)
maxsum[j] = max(maxsum[j],maxsum[j + 1]) + number[i][j];
cout << maxsum[1] << endl;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: