求分析时间复杂度
查看原帖
求分析时间复杂度
1008513
xiaoshumiao楼主2024/3/4 15:50

rt,教练讲的时候没说,感觉和题解不太一样。

#include<cstdio>
#include<algorithm>
using namespace std;
const int N=510,INF=0x3f3f3f3f;
int t1[N],t2[N],dp[100210],c[100210];
int main() {
  //freopen("bus.in","r",stdin);
  //freopen("bus.out","w",stdout);
  int n,m; scanf("%d %d",&n,&m);
  for(int i=1;i<=n;i++) scanf("%d",&t1[i]);
  sort(t1+1,t1+n+1),t2[1]=m;
  for(int i=2;i<=n;i++) t2[i]=t2[i-1]+min(t1[i]-t1[i-1],m*2);
  for(int i=1;i<=n;i++) c[t2[i]]++;
  for(int i=t2[n]-1;i>=0;i--) {
    dp[i]=INF;
    for(int j=1,t3=0,sum=0;j<m*2;j++) {
      if(j>=m) dp[i]=min(dp[i],t3+dp[i+j]);
      sum+=c[i+j],t3+=sum;
    }
  }
  return printf("%d",dp[0]),0;
}
2024/3/4 15:50
加载中...