Tilechng

#include<bits/stdc++.h>
using namespace std;
int n,m,t,sum;
int a;
int dp[11][11111];
//dp[i][j]:选到第i时候为j的最小代价 
int main() {
	cin>>n>>m;
	memset(dp,125,sizeof(dp));
	dp[0][0]=0;
	for(int i=1;i<=n;i++) {
		cin>>a;
		for(int j=0;j<=m;j++) {
			for(int k=0;k*k<=j;k++) {//变到 K 
				dp[i][j]=min(dp[i][j],dp[i-1][j-k*k]+(a-k)*(a-k));
			}
		} 
	}
	if(dp[n][m]>=1090000) {
		cout<<-1;
	}
	else {
		cout<<dp[n][m];
	}
	return 0;
}
posted @ 2023-02-21 14:13  cjrqwq  阅读(5)  评论(0)    收藏  举报  来源