动态规划:
f[i]: 1~i中 已经划分好的所有方案的集合
#include#include #include #include using namespace std; typedef long long LL; typedef pair pii; const int mod = 1e9 + 7 , INF = 0x3f3f3f3f , N = 1e4 + 10; int a[N]; int f[N]; int main() { int n; cin >> n; for (int i = 1 ; i <= n ; i ++) cin >> a[i]; f[0] = 1; for (int i = 1 ; i <= n ; i ++) { int minv = a[i]; int maxv = a[i]; for (int j = i; j >= 1 ; j --) { minv = min(minv,a[j]); maxv = max(maxv,a[j]); if (i - j == maxv - minv) f[i] = (f[i] + f[j - 1]) % mod; } } cout << f[n]; }



