全部评论 3

  • A,B,C的题解呢

    3小时前 来自 广东

    0
  • 附一个记忆化搜索解法:

    #include <bits/stdc++.h>
    using namespace std;
    const int N = 1e4+5;
    int n,q,p[N],a[N],b[N],sum[N],mem[N][505];
    int dfs(int i,int x) {
    	if(i > n) {
    		return x;
    	}
    	if(x > 500) {
    		return dfs(i + 1,x - b[i]);
    	}
    	else {
    		if(mem[i][x]) {
    			return mem[i][x];
    		}
    		else {
    			if(p[i] >= x) {
    				mem[i][x] = dfs(i + 1,x + a[i]);
    			}
    			else {
    				if(x - b[i] > 0) mem[i][x] = dfs(i + 1,x - b[i]);
    				else mem[i][x] = dfs(i + 1,0);
    			}
    			return mem[i][x];
    		}
    	}
    }
    int main() {
    	cin >> n;
    	for(int i = 1;i <= n;i++) {
    		cin >> p[i] >> a[i] >> b[i];
    		sum[i] = sum[i - 1] + b[i];
    	}
    	cin >> q;
    	while(q--) {
    		int x,cnt;
    		cin >> x;
    		if(x > 500) {
    			cnt = lower_bound(sum+1,sum+1+n,x-500) - sum - 1;
    			cout << dfs(cnt + 1,x - sum[cnt]) << '\n';
    		}
    		else cout << dfs(1,x) << '\n';
    	}
    	return 0;
    }
    

    2天前 来自 浙江

    0
  • d

    2天前 来自 浙江

    0

热门讨论