迷迷糊糊的合唱队列

#include
#include
#include
using namespace std;
int a[100];
int dp[100];


int shangsheng(int begin,int end)
{
memset(dp, 0, 100 * sizeof(int));
int ans = 0;
for (int i = begin;i < end;i++)
{
dp[i] = 1;
for (int j = 0;j < i;j++)
if (a[j] < a[i])dp[i] = max(dp[j] + 1, dp[i]);
ans = max(ans, dp[i]);
}
return ans;
}
int xiajiang(int begin,int end)
{
memset(dp, 0, 100 * sizeof(int));
int ans = 0;
for (int i = begin;i < end;i++)
{
dp[i] = 1;
for (int j = 0;j < i;j++)
if (a[j] > a[i])dp[i] = max(dp[j] + 1, dp[i]);
ans = max(ans, dp[i]);
}
return ans;


}
int main()
{
int n;
cin >> n;
int ans = 0;
for (int i = 0;i < n;i++)cin >> a[i];
for (int i = 0;i < n ;i++)
{
ans = max(ans, shangsheng(0, i) + xiajiang(i, n));
}
cout << n - ans;
return 0;

}


自己写的,本想最后cout<


突然明白了,第一个上升子序列的区间是[0,i)  而下降的是[i,n)  合并起来正好就是原来的串

你可能感兴趣的:(动态规划)