!!求助!! 第二个点段错误一直过不了
#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代码进行比对过后,还是找不到问题哇
