sum作为状态,局部变量。
#include <iostream>
int N;
int mymax=0;
int tian[1000][1000];
using namespace std;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
void search(int x,int y,int sum){
if(x==N){
if (sum>mymax)
mymax=sum;
return ;
}
search(x+1,y,sum+tian[x+1][y]);
search(x+1,y+1,sum+tian[x+1][y+1]);
}
int main(int argc, char** argv) {
cin>>N;
for(int i=1;i<=N;i++)
for(int j=1;j<=i;j++)
{
cin>>tian[i][j];
}
search(1,1,tian[1][1]);
cout<<mymax;
return 0;
}
打印方案:
#include <iostream>
int N;
int mymax=0;
int tian[1000][1000];
int a[10000]={0};
using namespace std;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
void search(int x,int y,int sum){
if(x==N){
if (sum>mymax)
mymax=sum;
for(int i=1;i<=N;i++ )
cout<<a[i]<<" ";
cout <<endl << endl;
return ;
}
a[x+1]=tian[x+1][y];
search(x+1,y,sum+tian[x+1][y]);
a[x+1]=0;
a[x+1]=tian[x+1][y+1];
search(x+1,y+1,sum+tian[x+1][y+1]);
a[x+1]=0;
}
int main(int argc, char** argv) {
cin>>N;
for(int i=1;i<=N;i++)
for(int j=1;j<=i;j++)
{
cin>>tian[i][j];
}
a[1]=tian[1][1];
search(1,1,tian[1][1]);
cout<<mymax;
return 0;
}
把sum换成全局的变量
#include <iostream>
int N;
int mymax=0;
int tian[1000][1000];
int sum;
using namespace std;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
void search(int x,int y){
if(x>N){
if (sum>mymax)
mymax=sum;
return ;
}
sum = sum + tian[x][y];
search(x+1,y);
search(x+1,y+1);
sum = sum - tian[x][y];
}
int main(int argc, char** argv) {
cin>>N;
for(int i=1;i<=N;i++)
for(int j=1;j<=i;j++)
{
cin>>tian[i][j];
}
sum=0;
search(1,1);
cout<<mymax;
return 0;
}