1 条题解
-
1
#include <bits/stdc++.h> using namespace std; const int inf = 0x3f3f3f3f; const int N = 2005; int T, n; int a[N], dp[N][N]; int main() { cin >> T; while(T--) { scanf("%d", &n); for(int i = 1; i <= n; i++) scanf("%d", a + i); memset(dp, 0x3f, sizeof dp); dp[1][1] = -inf; for(int i = 1; i < n; i++) {//由于我的转移是转移i+1,所以i<n。 for(int j = 1; j <= min(n / 2, i); j++) {//剪去无用状态 if(a[i] < a[i + 1]) dp[i + 1][j + 1] = min(dp[i][j], dp[i + 1][j + 1]); if(a[i + 1] > dp[i][j]) dp[i + 1][i - j + 1] = min(a[i], dp[i + 1][i - j + 1]);//转移 } } if(dp[n][n / 2] == inf) puts("No!"); else puts("Yes!"); } return 0; }
- 1
信息
- ID
- 3658
- 时间
- 2000ms
- 内存
- 125MiB
- 难度
- 5
- 标签
- 递交数
- 4
- 已通过
- 3
- 上传者