自己用dfs写了一下wa了不知道为什么//被我队友发现我memset写错了!!!!
f(0)); curnum=0;cin>>m;for(int i=1;i<=m;i++){for(int j=1;j<=i;j++)cin>>map[i][j];}max1=0;curnum+=map[1][1];cont1[1][1]+=map[1][1];dfs(2,1);printf("%d\n",max1);}return 0;}
#include <iostream>
#include <cstdio>
#include <string.h>
using namespace std;
int max1;
int m;
int curnum;
int map[105][105]={0};
int cont1[105][105]={0};
void dfs(int k,int m1)
{
if(k>m)
{
if(curnum>max1)
{
max1=curnum;
}
return ;
}
for(int i=m1;i<=m1+1;i++)
{
curnum+=map[k][i];
if(curnum>=cont1[k][i])
{
cont1[k][i]=curnum;
dfs(k+1,i);
}
curnum-=map[k][i];
}
}
int main()
{
int n;
cin>>n;
while(n--)
{
//memset(map,0,sizeof(0));
//memset(cont1,0,sizeof(0));
//memset(map,0,sizeof(0));
//memset(cont1,0,sizeo
#include <iostream>
#include <cstdio>
#include <string.h>
using namespace std;
int max1;
int m;
int curnum;
int map[105][105]={0};
int cont1[105][105]={0};
void dfs(int k,int m1)
{
if(k>m)
{
if(curnum>max1)
{
max1=curnum;
}
return ;
}
for(int i=m1;i<=m1+1;i++)
{
curnum+=map[k][i];
if(curnum>=cont1[k][i])
{
cont1[k][i]=curnum;
dfs(k+1,i);
}
curnum-=map[k][i];
}
}
int main()
{
int n;
cin>>n;
while(n--)
{
memset(map,0,sizeof(map));
memset(cont1,0,sizeof(cont1));
curnum=0;
cin>>m;
for(int i=1;i<=m;i++)
{
for(int j=1;j<=i;j++)
cin>>map[i][j];
}
max1=0;
curnum+=map[1][1];
cont1[1][1]+=map[1][1];
dfs(2,1);
printf("%d\n",max1);
}
return 0;
}
f(0)); curnum=0;cin>>m;for(int i=1;i<=m;i++){for(int j=1;j<=i;j++)cin>>map[i][j];}max1=0;curnum+=map[1][1];cont1[1][1]+=map[1][1];dfs(2,1);printf("%d\n",max1);}return 0;}
正解
#include <iostream>
#include <algorithm>
using namespace std;
int dp[105][105]={0};
int num[105][105]={0};
int main()
{
int n;
cin>>n;
while(n--)
{
int m;
cin>>m;
for(int i=1;i<=m;i++)
{
for(int j=1;j<=i;j++)
{
cin>>num[i][j];
}
}
for(int i=m-1;i>=1;i--)
{
for(int j=1;j<=i;j++)
{
num[i][j]=num[i][j]+max(num[i+1][j],num[i+1][j+1]);
}
}
cout<<num[1][1]<<endl;
}
return 0;
}