死循环!
查看原帖
死循环!
926886
kind_Ygg楼主2024/8/24 14:35
#include<bits/stdc++.h>
#define int long long 
#define mod(x) (((x+10)%10+10)%10)
using namespace std;
int n,m;
int a[105],sum[105];
int dp_Max[105][105][15],dp_Min[105][105][15];
signed main()
{
	cin>>n>>m;
	memset(dp_Min,0x3f,sizeof dp_Min);
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
		a[i]%=10;
		sum[i]=(sum[i-1]+a[i])%10;
		a[i+n]=a[i];
	}
	for(int i=n+1;i<=(n<<1);i++)
		sum[i]=(sum[i-1]+a[i])%10;
	for(int i=1;i<=n*2;i++)
		for(int j=i;j<=n*2;j++)
			dp_Max[i][j][1]=dp_Min[i][j][1]=mod(sum[j]-sum[i-1]);
	for(int st=2;st<=m;st++)
	{
		for(int i=1;i<=n*2;i++)
		{
			for(int j=i+st-1;j<=n*2;i++)
			{
				for(int k=1;k<=i-j;k++)
				{
					dp_Max[i][j][st]=max(mod(dp_Max[i][j-k][st-1]+mod(sum[j]-sum[j-k])),dp_Max[i][j][st]);
					dp_Min[i][j][st]=min(mod(dp_Min[i][j-k][st-1]+mod(sum[j]-sum[j-k])),dp_Min[i][j][st]);
				}
			}
		}
	}
	int maxn=LLONG_MIN,minn=LLONG_MAX;
	for(int i=1;i<=n;i++)
	{
		maxn=max(maxn,dp_Max[i][i+n-1][m]);
		minn=min(minn,dp_Min[i][i+n-1][m]);
	}
	cout<<minn<<'\n'<<maxn<<'\n';
	return 0;
}
2024/8/24 14:35
加载中...