1. 程式人生 > >【洛谷P1091】合唱隊形

【洛谷P1091】合唱隊形

cout blog style pan span sca scanf iostream int

這個題顯然是個dp,前面的人選完之後就不會影響後面的狀態了,滿足無後效性,設dp[i][0/1]表示當前判斷到第i位同學並且一定選擇他,從他開始上升(0)還是下降(1)

註意有組數據是持續上升的……

#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int n,dp[110][2],a[110],ans;
int main()
{
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
        scanf(
"%d",&a[i]); for(int i=1;i<=n;i++) for(int j=0;j<i;j++) { if(a[j]<a[i])//0為持續上升 dp[i][0]=max(dp[i][0],dp[j][0]+1); if(a[j]>a[i])//1為持續下降 dp[i][1]=max(dp[i][1],max(dp[j][0]+1,dp[j][1]+1)); } for(int
i=1;i<=n;i++) ans=max(ans,dp[i][1]),ans=max(ans,dp[i][0]); cout<<n-ans; }

【洛谷P1091】合唱隊形