3 条题解

  • 1
    @ 2022-1-2 10:06:36

    WSSB

    #include<iostream> 
    #include<algorithm>       
    #include<cstring>
    using namespace std; 
    int V, P, dp[3005][305], a[3005], w[3005][3005];
    
    int main(){
    	cin >> V >> P;
        for(int i = 1; i <= V; i++)
            cin >> a[i];
        sort(a+1, a+V+1);
    
        for(int l=1; l <= V; l++) {
    		w[l][l] = 0;
    		for(int r = l+1; r <= V; r++) {
    			w[l][r] = w[l][r-1] + a[r] - a [(l+r)/2];
    		}
    	}
    
        memset(dp, 0x3f, sizeof(dp));
        dp[0][0] = 0;
    
        for(int i = 1; i <= V; i++)
            for(int j = 1; j <= P; j++)
                for(int k = 0; k < i; k++) 
    				dp[i][j] = min(dp[k][j-1] + w[k+1][i], dp[i][j]);
        cout << dp[V][P] << endl;
        return 0;
    }
    

    信息

    ID
    246
    时间
    1000ms
    内存
    128MiB
    难度
    3
    标签
    递交数
    61
    已通过
    35
    上传者