从左到右, 从右到左分别dp一次, 然后就可以回答询问了. ---------------------------------------------------------- #include<bits/stdc++.h> using namespace std; const int V = 1000; const int maxn = 1009; int L[maxn][maxn], R[maxn][maxn]; int w[maxn], v[maxn], c[maxn], N…
当时一直在想前缀和...多亏张队提醒... 从1到n背次包,保存每一个状态下的价值,就是不要把第一维压掉:再从n到1背一次,同样记住每种状态: 然后询问时相当于是max(前缀+后缀),当然前缀后缀中间去掉了一个应去掉的商品. #include<cstdio> #include<iostream> #define R register int using namespace std; inline int g() { R ret=,fix=; register :fix; +(ch^…