为什么会CE
  • 板块学术版
  • 楼主WRuperD
  • 当前回复4
  • 已保存回复4
  • 发布时间2021/4/15 22:35
  • 上次更新2023/11/5 00:30:20
查看原帖
为什么会CE
247388
WRuperD楼主2021/4/15 22:35

rt

#include<iostream>
#include<cmath>
using namespace std;
int dp[1000+10][6000+10] = {99999};
int v[1000+10], w[1000+10];
bool flag[1000+10][6000+10] = {false};
int main()
{
	int n;
	cin>>n;
	long long cnt = 0;
	for(int i = 1; i <= n; i++)
	{
		int a,b;
		cin>>a>>b;
		v[i] = abs(a-b)*2;
		if(a<b)
		{
			w[i] = 0;
			v[i] = (b-a)*2;
		}	
		else
		{
			w[i] = -2;
			v[i] = (a-b)*2;
		}
		cnt += v[i];
	}
	flag[0][cnt] = true;
	for(int i = 1; i <= n; i++)
	{
		for(int j = 0; j <= 6000+10; j++)
		{
			dp[i][j] = 999999;
			if(flag[i-1][j])	dp[i][j] = min(dp[i][j], dp[i-1][j] + w[i]);
			if(flag[i-1][j+v[i]])	dp[i][j] = min(dp[i][j], dp[i-1][j+v[i]] + 1 + w[i]);
			if(dp[i][j] != 99999)	flag[i][j] = true;
		}
	}
	for(int i = 1; i <= n; i++)
	{
		for(int j = 0; j <= 10; j++)
		{
			cout<<dp[i][j]<<" ";
		}
		cout<<endl;
	}

	for(int i = 0; i <= n; i++)
	{
		if(flag[n][i]){
			cout<<dp[n][i]<<endl;	return 0;
		}	
	}
	return 0;
 } 
2021/4/15 22:35
加载中...