#include #include #include #include using namespace std; using vi=vector; using vvi=vector; using pii=pair; using vpii=vector; using vvpii=vector; int max_u(int&m, int v) { if(m=0;i--) { if(t_sum[i]<0) continue; for(int j=t.size()-1;j>=0;j--) { int ni=i+j+ve.second*2; if(ni>m) continue; if(t[j]<0) continue; max_u(t_sum[ni], t_sum[i]+t[j]); } } /* printf("t "); for(auto dpe:t) printf("%d ", dpe); printf("\n", ret); */ } /* printf("t_sum "); for(auto dpe:t_sum) printf("%d ", dpe); printf("\n", ret); */ for(int i=0;i<=m;i++) { if(t_sum[i]<0) continue; max_u(dp[i], t_sum[i]+u[c]); max_u(ret, dp[i]); } /* printf("dp "); for(auto dpe:t_sum) printf("%d ", dpe); printf("\nret=%d\n", ret); */ } int solve(vvpii& v, vi& u, int m) { vi dp; int ret=-1; dp.assign(m+1, -1); solve_i(v, u, m, -1, 0, dp, ret); return ret; } int main(void) { int n, m; vi u; vvpii v; while(scanf("%d%d", &n, &m)==2) { v.clear(); v.resize(n); u.resize(n); for(int i=0;i