刚刚点错关了QWQ再次求助qwq
查看原帖
刚刚点错关了QWQ再次求助qwq
323989
Vector_Mingfan楼主2020/9/26 16:12
#include<bits/stdc++.h>
using namespace std;
const int MAXX=500 + 5;
const int INF = 0x7fffffff;

int n , m;
int nm , cnt , minn , Ans;
int a[MAXX] , dp[MAXX] , mx[MAXX] , s[MAXX];

int main() {
    scanf("%d %d",&n,&m);
    for (int i=1; i<=n; i++) {
        scanf("%d",&a[i]);
    }
    stable_sort(a + 1 , a + n + 1);//排序 
    nm = a[n] + m;
    cnt = 1;
    for(int i=1; i<=nm; i++) {
        mx[i] = mx[i-1];
        s[i] = s[i-1];
        while(a[cnt] <= i) {
            mx[i]++ ;
            s[i] += a[cnt];
            cnt++ ;
        }
    }
	for(int i=0; i<m; i++ ) {
        dp[i] = s[i];
    }
    for(int i=m; i<=nm; i++) {
        if(mx[i] == mx[i - m]) {
        	dp[i] = dp[i - m];
		}
        else
        {
            minn = INF;
            for(int j=max(0,i-2*m); j<=i-m; j++) {
            	
                minn = min(minn , dp[j] + (mx[i] - mx[j]) * i - (s[i] - s[j]));
            }
            dp[i] = minn;
        }
    }
    Ans = INF;
    for(int i=a[n]; i<nm; i++ ) {
        Ans = min(Ans , dp[i]);
    }
    cout << Ans;
}
2020/9/26 16:12
加载中...