调ABC E时出现神秘现象
查看原帖
调ABC E时出现神秘现象
687685
not_so_littlekayen楼主2025/1/25 23:19
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define min(a, b) (a<b?a:b)
#define rep(i, a, b) for(int i = a;i <= b;i++)
#define brep(i, a, b) for(int i = a;i >= b;i--)
const int Max = 5e3+5;
int n, x, dp[Max][Max][3];
struct node{
	int vi, ai, ci;
}f[Max];
bool cmp(node l, node r)
{
	if(l.vi == r.vi)
	{
		if(l.ai == r.ai)
			return l.ci < r.ci;
		return l.ai < r.ai;
	}
	return l.vi < r.vi;
}
int mmin(int a, int b, int c)
{
	return min(min(a, b), c);
}
signed main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);cout.tie(0);
	cin >> n >> x;
	rep(i, 1, n)
		cin >> f[i].vi >> f[i].ai >> f[i].ci;
	sort(f+1, f+n+1, cmp);
	rep(i, 1, n)
	{
		brep(j, x, f[i].ci)
		{
			//dp[i][j][f[i].vi]
			int a, b, c, d, e, g;
			a = dp[i-1][j][1];
			b = dp[i-1][j][2];
			c = dp[i-1][j][3];
			d = dp[i-1][j-f[i].ci][1];
			e = dp[i-1][j-f[i].ci][2];
			g = dp[i-1][j-f[i].ci][3];
			switch(f[i].vi)
			{
				case 1:d += f[i].ai;break;
				case 2:e += f[i].ai;break;
				default:g += f[i].ai;
			}
			if(mmin(a, b, c) == mmin(d, e, g))
			{
				if(a <= d&&b <= e&&c <= g)
				{
					dp[i][j][1] = d;
					dp[i][j][2] = e;
					dp[i][j][3] = g;
				}
			}
			else if(mmin(a, b, c) < mmin(d, e, g))
			{
				dp[i][j][1] = d;
				dp[i][j][2] = e;
				dp[i][j][3] = g;
			}
			else 
			{
				dp[i][j][1] = a;
				dp[i][j][2] = b;
				dp[i][j][3] = c;
			}
		}
		rep(j, 0, f[i].ci-1)
		{
			dp[i][j][1] = dp[i-1][j][1];
			dp[i][j][2] = dp[i-1][j][1];
			dp[i][j][3] = dp[i-1][j][1];
		}
	}
  //这里!!!!!!!!
  //想顺延状态但dp值在调用i时总是显示为0
	rep(i, 1, n)
	{
		rep(j, 0, x)
			cout << dp[i][j][1] <<dp[i][j][2] << dp[i][j][3] << " ";
		cout << endl;
	}
	return 0;
}

为什么把i换成数字就行了,改回来又不行了?百思不得其解 求助万能谷民

2025/1/25 23:19
加载中...