一定要扪心自问

你如果还只是理解的那么片面,学了那么多有什么用
一定要思考
就像这道题吧:
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;	
	}
} 
posted @ 2025-11-27 21:27  ll今天也要加油啊  阅读(2)  评论(0)    收藏  举报