题解 | #合唱队#
合唱队
https://www.nowcoder.com/practice/6d9d69e3898f45169a441632b325c7b4
#include <stdio.h> //基本上从新学了一遍动态规划,真是学时不知知识好,错把美女当成宝! int main() { int str[3001]; int lmax[3001]; int lmaxs[3001]; int rmax[3001]; int rmaxs[3001]; int n; scanf("%d",&n); for(int i=0;i<n;i++) { scanf("%d",&str[i]); } for(int i=0;i<n;i++) { lmax[i]=1; } for(int i=0;i<n;i++) { lmaxs[i]=1; } for(int i=0;i<n;i++) { rmax[i]=1; } for(int i=0;i<n;i++) { rmaxs[i]=1; } for(int i=1;i<n;i++) { for(int j=i-1;j>=0;j--) { if(str[i]>str[j]) { if((lmax[j]+1)>lmaxs[i]) { int c,d; c=lmaxs[i]; d=lmax[j]; lmaxs[i]=lmax[j]+1; } } } lmax[i]=lmaxs[i]; } for(int i=n-2;i>=0;i--) { for(int j=i+1;j<n;j++) { if(str[i]>str[j]) { if((rmax[j]+1)>rmaxs[i]) { int c,d; c=rmaxs[i]; d=rmax[j]; rmaxs[i]=rmax[j]+1; } } } rmax[i]=rmaxs[i]; } int max; max=1; for(int i=0;i<n;i++) { if((lmax[i]+rmax[i]-1)>max) { int c,d; c=lmax[i]; d=rmax[i]; max=lmax[i]+rmax[i]-1; } } int min; min=n-max; printf("%d",min); }