动态规划:数字金字塔
#include<iostream>
using namespace std;
int a[101][101];
//int dfs(int m,int n){
//}
int main(){
int i,j,m;
cin>>m;
for(i=0;i<m;i++){
for(j=0;j<=i;j++){
cin>>a[i][j];
}
}
for(i=m-1;i>0;i--){
for(j=0;j<i;j++){
cout<<"poop"<<endl;
if(a[i][j]>a[i][j+1]){
a[i-1][j]+=a[i][j];
}else{
a[i-1][j]+=a[i][j+1];
}
}
}
cout<<a[0][0];
//for(i=0;i<m;i++){
// for(j=0;j<=i;j++){
// cout<<a[i][j];
// }
//}
return 0;
}
#include<iostream>
using namespace std;
int a[101][101],b[101][101],n,ans;
void dfs(int x,int y,int curr){
if(x==n){
if(curr>ans){
ans=curr;
}
cout<<"x "<<x<<" y "<<y<<" curr "<<curr<<endl;
return ;
}
dfs(x+1,y+1,curr+a[x+1][y+1]);
dfs(x+1,y,curr+a[x+1][y]);
}
int main(){
cin>>n;
for(int i=1;i<=n;i++){
for(int j=1;j<=i;j++){
cin>>a[i][j];
}
}
ans=0;
dfs(1,1,a[1][1]);
cout<<ans;
return 0;
}
#include<iostream>
#include<algorithm>
#include<stdlib.h>
#include<cmath>
using namespace std;
const int MAXN=1001;
int a[MAXN][MAXN],b[MAXN][MAXN];
int n;
int max(int num1,int num2){
if(num1>=num2){
return num1;
}else{
return num2;
}
}
int dfs(int x,int y){
cout<<"loop"<<endl;
cout<<endl;
if(b[x][y]==-1){
cout<<"poop"<<endl;
cout<<endl;
if(x==n){
b[x][y]=a[x][y];
}else{
b[x][y]=max(dfs(x+1,y),dfs(x+1,y+1))+a[x][y];
}
}
return b[x][y];
}
int main(){
cin>>n;
int i,j,k;
for(i=1;i<=n;i++){
for(j=1;j<=i;j++){
cin>>a[i][j];
}
}
//memset(b,-1,sizeof(b));
for(i=1;i<=n;i++){
for(j=1;j<=i;j++){
b[i][j]=-1;
}
}
k=dfs(1,1);
cout<<k;
return 0;
}
#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
int max(int num1,int num2){
if(num1>=num2){
return num1;
}else{
return num2;
}
}
int main(){
int i,j,n;
int a[101][101],b[101][101];
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
cin>>n;
for(i=1;i<=n;i++){
for(j=1;j<=i;j++){
cin>>a[i][j];
}
}
b[1][1]=a[1][1];
for(i=1;i<=n;i++){
for(j=1;j<=i;j++){
if(j-1>=0){
b[i][j]=max(b[i-1][j],b[i-1][j-1])+a[i][j];
}else{
b[i][j]=b[i-1][j]+a[i][j];
}
}
}
int max=b[n][1];
for(i=1;i<n;i++){
if(b[n][i]>=n){
max=b[n][i];
}
}
cout<<max;
return 0;
}