题目地址:https://cn.vjudge.net/problem/HDU-1069
看了一下这个DP教程,受到启发来做这题,一开始solve函数是这么写的
int solve()
{
getpre();
memset(dp,0,sizeof(dp));
dp[0][0] = 0;
dp[0][1] = bl[0].c;
for(int i=1;i<n;i++){
dp[i][0] = max(dp[i-1][0],dp[i-1][1]);
if(pre[i]!=-1){
dp[i][1] = bl[i].c;
if(dp[pre[i]][1]<dp[pre[i]][0]){
int mx = 0;
for(int j=i-1;j>=0;j--){
if(dp[j][1]>mx&&bl[j].a>bl[i].a&&bl[j].b>bl[i].b)
mx = dp[j][1];
}
dp[i][1]+=mx;
}
else dp[i][1]+=dp[pre[i]][1];
}