单调递增的部分我已经加了特判,但是为什么这部分的分也没拿到……
求助一组hack数据,谢谢
#include<cstdio>
#include<ctime>
#include<cstdlib>
#define max(a, b) a>=b ? a : b
#define min(a, b) a<=b ? a : b
int n, m, a[105], mn = 1e9, cnt;
clock_t st;
void dfs(int p, int now, int b, int s) {
if((double)(clock()-st) / CLOCKS_PER_SEC >= 0.950) {
printf("%d", mn); exit(0);
}
if(p == m) {
mn = b-s;
return;
}
if(b-s >= mn) return;
for(int i = now+2;i <= n-(m-p)*2+2;++i)
if(max(b, a[i])-min(s, a[i]) < mn) dfs(p+1, i, max(b, a[i]), min(s, a[i]));
}
int main () {
st = clock();
scanf("%d%d", &n, &m);
for(int i = 1;i <= n;++i) {
scanf("%d", a+i);
if(a[i] > a[i-1]) ++cnt;
}
if(cnt==n) {
for(int i = 1;i+m*2-2 <= n;++i)
mn = min(mn, a[i+m*2-2]-a[i]);
printf("%d", mn);
return 0;
}
for(int i = 1;i <= n-2*m+2;++i) dfs(1, i, a[i], a[i]);
printf("%d", mn);
return 0;
}