!!求助!! 第二个点段错误一直过不了

#include<bits/stdc++.h>
#define int long long 
#define endl '\n'
#define INF 0x3f3f3f3f
#define rep(i, x, y) for(int i = (x); i <= (y); ++i)
#define pii pair<int, int>
#define fst first
#define sd second
using namespace std;

const int N = 2010;
int n, m, t, x, vel, po, val[1101][110], f[1101][110];
int vis[1101][110], mt = -INF;

bool check(int x){
	return x >= 1 && x <= n;
}

void solve(){
	cin >> n >> m;
	
	while (cin >> t >> x >> vel >> po){
		if ((m-1) % vel){
			continue;
		}
		int tt = t + (m-1)/vel;
		val[tt][x] += po;
		mt = max(mt, tt);
	}
	
	memset(f, -INF, sizeof(f));
	int op = n/2 + 1;
	f[0][op] = 0;
	for (int i = 1; i <= mt; ++i){
		for (int j = 1; j <= n; ++j){
			for (int k = -2; k <= 2; ++k){
				int pos = j+k;
				if (pos >= 1 && pos <= n){
					if (f[i - 1][pos] + val[i][j] > f[i][j]){
						f[i][j] = f[i - 1][pos] + val[i][j];
						vis[i][j] = k;
					}
				}	
			}
		}
	}
	
	
	int ans = -INF, last;
	for (int i = 1; i <= n; ++i){
		if (f[mt][i] > ans){
			last = i;
			ans = f[mt][i];
		}
	}
	
//	printf("%lld\n", ans);
	cout << ans << endl;
	
	vector<int> res;
	for (int i = mt; i >= 1; --i){
		res.push_back(-vis[i][last]);
		last += vis[i][last];
	}
	

	
	reverse(res.begin(), res.end());
	for (auto i : res){
		cout << i << endl;
	}
}

signed main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);

	int qq;
	qq = 1;
//	cin >> qq;
	while (qq--){
		solve();
	}
	
	return 0;
}

把自己的代码和AC代码进行比对过后,还是找不到问题哇

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务