第一个区间dp
思路 : 我们从中间开始拿,作为年份是n的情况一直到1
dp[ i ] [ j ] 代表从第i件拿到第j件的最优解,状态转移方程
dp[i][i+len] = max( (n-len)*d[i] + dp[i+1][i+len] , (n-len)*d[i+len] + dp[i][i+len-1] );
#include <iostream>
using namespace std;
int dp[2020][2020];
int d[2020];
int main()
{
int n;
cin>>n;
for ( int i=1; i<=n; i++ ) {
cin>>d[i];
dp[i][i] = d[i]*n;
}
for ( int len=1; len<n; len++ ) {
for ( int i=1; i<=n-len; i++ ){
dp[i][i+len] = max( (n-len)*d[i] + dp[i+1][i+len] , (n-len)*d[i+len] + dp[i][i+len-1] );
}
}
cout<<dp[1][n]<<endl;
return 0;
}i] + dp[i+1][i+len] , (n-len)*d[i+len] + dp[i][i+len-1] );
本文介绍了一种区间动态规划算法的应用实例,通过一个具体问题展示了如何使用动态规划解决区间选择问题。详细阐述了状态定义、状态转移方程及其实现代码。
270

被折叠的 条评论
为什么被折叠?



