在求最大值的过程中,赋初始值为-1,是不正确的的
而赋值0xc0是AC
详情可见P3119
部分代码如下```
memset(dp1, 0xc0, sizeof dp1);
memset(dp2, 0xc0, sizeof dp2);
// for(int i = 1; i <= n; i++) cout << id[i] << ' ';
dp1[id[1]] = val[id[1]];
dp2[id[1]] = 0;
for(int i = id[1]; i; i--){
for(int j : v_new[i]) dp1[j] = max(dp1[j], dp1[i] + val[j]);
}
for(int i = id[1] + 1; i <= cnt; i++){
for(int j : v_new[i]) dp2[i] = max(dp2[i], dp2[j] + val[i]);
}
int ans = 0;
for(int i = 1; i <= cnt; i++){
for(int j : v_new[i]){
if(i >= id[1] && j <= id[1]){
ans = max(ans, dp1[j] + dp2[i]);
}
}
}
赋值-1即
memset(dp1, -1, sizeof dp1);
memset(dp2, -1, sizeof dp2);