求求各位神犇帮助,蒟蒻65分,WA了。。。
查看原帖
求求各位神犇帮助,蒟蒻65分,WA了。。。
177838
IGD_XW楼主2020/9/29 17:13
#include<bits/stdc++.h>
using namespace std;
int n,m,r,c;
int a[30][30];
int b[30];
int p[30],q[30][30];
int dp[30][30];
int minn=INT_MAX;
void init_()
{
	memset(q,0,sizeof(q));
	for(int i=1;i<=n;i++)
	{
		p[i]=0;
		for(int j=1;j<=c;j++)
		{
			if(j<c) p[i]+=abs(a[i][b[j]]-a[i][b[j+1]]);
			for(int k=1;k<i;k++)
			{
				q[i][k]+=abs(a[k][b[j]]-a[i][b[j]]);
			}
		}
	}
}
void dfs(int t)
{
	if(t>c)
	{
		init_();
		for(int i=1;i<=n;i++)
		{
			for(int j=1;j<=min(i,r);j++)
			{
				if(j==1) dp[i][j]=p[i];
				else if(i==j) dp[i][j]=dp[i-1][j-1]+p[i]+q[i][j-1];
				else
				{
					dp[i][j]=INT_MAX;
					for(int k=j-1;k<i;k++)
					{
						dp[i][j]=min(dp[i][j],dp[k][j-1]+p[i]+q[i][k]);
					}
				}
				if(j==r) minn=min(minn,dp[i][j]);
			}
		}
		return;
	}
	for(int i=b[t-1]+1;i<=n-(c-t);i++)
	{
		b[t]=i;
		dfs(t+1);
	}
	return;
}
int main()
{
	cin>>n>>m>>r>>c;
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=m;j++)
		{
			cin>>a[i][j];
		}
	}
	memset(dp,0x3f,sizeof(dp));
	dfs(1);
	cout<<minn;
	return 0;
}
2020/9/29 17:13
加载中...