最基础的dp题
下面这个不知道为什么只能过28%
#include <cstdio>
#include <algorithm>
using namespace std;
int n,t;
int a[110][110],dp[2][110];
int main()
{
scanf ("%d",&n);
for (int i=1;i<=n;i++) {
for (int j=1;j<=i;j++)
scanf ("%d",&a[i][j]);
}
for (int i=1;i<=n;i++)
dp[0][i]=a[n][i];
for (int i=n-1,t=0;i>=1;i--,t=1-t) {
for (int j=1;j<=i;j++) {
dp[1-t][j]=max(dp[t][j]+a[i][j],dp[t][j+1]+a[i][j]);
}
}
printf ("%d\n",dp[t][1]);
return 0;
}
下面这个可以过
#include <cstdio>
#include <algorithm>
using namespace std;
int n,t;
int a[110][110];
int main()
{
scanf ("%d",&n);
for (int i=1;i<=n;i++) {
for (int j=1;j<=i;j++)
scanf ("%d",&a[i][j]);
}
for (int i=n-1;i>=1;i--,t=1-t) {
for (int j=1;j<=i;j++) {
a[i][j]=a[i][j]+max(a[i+1][j],a[i+1][j+1]);
}
}
printf ("%d\n",a[1][1]);
return 0;
}