P7116打的暴力,为什么RE了
#include <bits/stdc++.h>
using namespace std;
int n, k, sum[500005][11], w[21], s[21], a[21], mx[21], mn[21], pos[21], pos2[21], mod = 1e9 + 7;
long long ans;
void dfs(int p) {
printf("%d\n", p);
if(p > k) {
for(int i = 1;i < p;++i) printf("%d ", a[i]);
puts("");
int xi = 1e9, po;
for(int i = 1;i <= k;++i) {
printf("%d\n", i);
if(mx[i] && (abs(w[i]-a[i])/mx[i])<xi || (abs(w[i]-a[i])/mx[i])==xi && pos[i]<po) xi = abs(w[i]-a[i])/mx[i], po = pos[i];
if(mn[i] && abs(a[i]/mn[i])<xi || (abs(a[i]/mn[i])==xi) && pos2[i]<po) xi = abs(a[i]/mn[i]), po = pos2[i];
}
if(xi == 1e9) {
bool flag = false;
for(int i = 1;i <= k;++i)
if(a[i]+mx[i]<1 || a[i]+mx[i]>w[i]) {flag = true; break;}
if(!flag) puts("-1"), exit(0);
}
ans = (ans + xi*n + po) % mod;
printf("%d %d %d\n", xi*n, po, ans);
return;
}
for(int i = 1;i <= w[p];++i) a[p] = i, dfs(p+1);
}
int main() {
scanf("%d%d", &n, &k);
for(int i = 1;i <= k;++i) scanf("%d", w+i);
for(int i = 1, x;i <= n;++i) {
scanf("%d%d", &x, s+i);
sum[i][x] = sum[i-1][x] + s[i];
if(sum[i][x]>mx[x] && sum[i][x]>0) mx[x] = sum[i][x], pos[x] = i;
if(sum[i][x]<mn[x] && sum[i][x]<0) mn[x] = sum[i][x], pos2[x] = i;
for(int j = 1;j <= k;++j)
if(j != x) sum[i][j] = sum[i-1][j];
}
// for(int i = 1;i <= n;++i) {
// printf("%d: ", i);
// for(int j = 1;j <= k;++j)
// printf("%d ", sum[i][j]);
// puts("");
// }
for(int i = 1;i <= k;++i) printf("%d %d\n", mx[i], pos[i]);
for(int i = 1;i <= k;++i) printf("%d %d\n", mn[i], pos2[i]);
dfs(1);
printf("%lld\n", ans%mod);
return 0;
}