什么时候取min有作用
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=2010;
int dp[maxn][maxn],n,a[maxn];
int main(){
while(~scanf("%d",&n)){
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
memset(dp,0x3f,sizeof(dp));
dp[1][1]=-1;
for(int i=1;i<=n;i++){
for(int j=1;j<=i;j++){
if(dp[i][j]==0x3f3f3f3f) continue;
if(a[i+1]>a[i]){
if(j+1==i-j+1) dp[i+1][j+1]=min(dp[i+1][j+1],dp[i][j]);
else dp[i+1][j+1]=dp[i][j];
}
if(a[i+1]>dp[i][j]){
if(j+1==i-j+1) dp[i+1][i-j+1]=min(dp[i+1][i-j+1],a[i]);
else dp[i+1][i-j+1]=a[i];
}
}
}
if(dp[n][n/2]==0x3f3f3f3f) printf("No!\n");
else printf("Yes!\n");
}
return 0;
}
我认为是更好可以分成i/2两个区间且两个if都进的时候取min
但是这份代码没分