当“多米诺骨牌”空间限制是16MB怎么办?
  • 板块灌水区
  • 楼主XingnoYi
  • 当前回复8
  • 已保存回复8
  • 发布时间2023/8/18 15:02
  • 上次更新2023/11/3 02:54:22
查看原帖
当“多米诺骨牌”空间限制是16MB怎么办?
735797
XingnoYi楼主2023/8/18 15:02

rt 贴一份luogu AC代码

#include <iostream>
#include <cstdio>
#include <cstring>
#define N 6005
using namespace std;
int INF = 0x3f3f3f3f;
int a[1005],b[1005];
int dp[1005][13010];
int n,ans;
bool check(int x)
{
	return x>=-N && x<=N;
}
int main()
{
	memset(dp,0x3f,sizeof dp);
    scanf("%d",&n);
    for(int i = 1;i <= n;i++)
    {
        scanf("%d%d",&a[i],&b[i]);
    }
    dp[0][N]=0;
    for(int i = 1;i <= n;i++)
    {
		int dis = a[i]-b[i];
        for(int j = -N;j <= N;j++)
		{
			if(check(j-dis))
			{
				dp[i][j+N] = min(dp[i][j+N],dp[i-1][j-dis+N]);
			}
			if(check(j+dis))
			{
				dp[i][j+N] = min(dp[i][j+N],dp[i-1][j+dis+N]+1);
			}
		}
    }
    for(int i = 0;i <= N;i++)
    {
        if(dp[n][i+N]!=INF || dp[n][N-i]!=INF)
		{
			cout << min(dp[n][i+N], dp[n][N-i]);
			break;
		}
    }
    return 0;
}
2023/8/18 15:02
加载中...