你如果还只是理解的那么片面,学了那么多有什么用
一定要思考
就像这道题吧:
1.min考虑的是初始值0x3f3f3f3f;
2.选了和没选而不是无脑的dp[][];
不可以再像之前一样永远无脑的dp[][]!!!;
#include <bits/stdc++.h>
using namespace std;
int arr[2005];
int main()
{int n,k;while(cin>>n>>k){vector<vector<int> >dp(n+2,vector<int>(k+2,0x3f3f3f3f));memset(arr,0,sizeof(arr));for(int i=1;i<=n;i++){cin>>arr[i];}for(int j=0;j<=k;j++){dp[0][j]=0;dp[1][j]=0;}for(int i=0;i<=n;i++){dp[i][0]=0;}sort(arr,arr+n+1);for(int i=2;i<=n;i++){for(int j=1;j<=k;j++)//选了和没选 {dp[i][j]=min(dp[i-1][j],dp[i-2][j-1]+(arr[i]-arr[i-1])*(arr[i]-arr[i-1]));}}cout<<dp[n][k]<<endl; }
}