题目
DFS代码
#include<iostream>
using namespace std;
typedef long long ll;
const ll maxn = 1e3 + 5;
const ll MOD = 1e9 + 7;
const ll INF = 0x7fffffff;
ll n;
ll a[maxn][maxn];
ll dp[maxn][maxn];
ll dfs(ll i,ll j) {
if (i == n)return a[i][j];
if (dp[i][j])return dp[i][j];
return dp[i][j] = max(dfs(i + 1, j), dfs(i + 1, j + 1)) + a[i][j];
}
int main() {
ios_base::sync_with_stdio(false), cin.tie(0);
cin >> n;
for (ll i = 1; i <= n; i++) {
for (ll j = 1; j <= i; j++) {
cin >> a[i][j];
}
}
cout << dfs(1,1);
return 0;
}
dp代码
#include<iostream>
using namespace std;
typedef long long ll;
const ll maxn = 1e3 + 5;
const ll MOD = 1e9 + 7;
const ll INF = 0x7fffffff;
ll n;
ll a[maxn][maxn];
ll dp[maxn][maxn];
int main() {
ios_base::sync_with_stdio(false), cin.tie(0);
ll n;
cin >> n;
for (ll i = 1; i <= n; i++) {
for (ll j = 1; j <= i; j++) {
cin >> a[i][j];
}
}
for (ll i = 1; i <= n; i++) {
for (ll j = 1; j <= i; j++) {
dp[i][j] = max(dp[i - 1][j - 1],dp[i - 1][j]) + a[i][j];
}
}
ll ans = -1;
for (ll i = 1; i <= n; i++)ans = max(ans, dp[n][i]);
cout << ans << "\n";
return 0;
}