一定要扪心自问
你如果还只是理解的那么片面,学了那么多有什么用
一定要思考
就像这道题吧:
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;
}
}

浙公网安备 33010602011771号