刚开始学习动态规划,参考了别人的思路~
链接: https://blog.csdn.net/lin_ty/article/details/89040469.
1.边界条件
2.最优子结构
3.状态转移方程
#include<bits/stdc++.h>
using namespace std;
const int maxn = 1005;
int main(int argc, char const *argv[])
{
int t;
cin >> t;
while(t--)
{
int n;
cin >> n;
int a[maxn], b[maxn];
for (int i = 0; i < n; ++i)
cin >> a[i];
for (int i = 0; i < n; ++i)
cin >> b[i];
int dp[maxn][maxn];
memset(dp,0,sizeof(dp));
for (int i = 0; i < n; ++i)
dp[i][i] = a[i] * b[n-1];
for (int i = n-1; i >= 0; i--)
{
for (int j = i + 1; j < n; ++j)
dp[i][j] = max(a[i] * b[n-(j-i+1)] + dp[i+1][j], a[j] * b[n-(j-i+1)] + dp[i][j-1]);
}
cout << dp[0][n-1] << endl;
}
return 0;
}