本文共 1450 字,大约阅读时间需要 4 分钟。
??????n????S?????????????????????????a_i?b_i???????????????????????????
#include#include #include using namespace std;int main() { int n, S; cin >> n >> S; vector a(n), b(n); for (int i = 0; i < n; ++i) { cin >> a[i] >> b[i]; } vector dp(S + 1, 0); dp[0] = 1; for (int i = 0; i < n; ++i) { int min_sum = 0, max_sum = 0; for (int j = 0; j <= S; ++j) { if (dp[j] > 0) { min_sum = min(min_sum, j + a[i]); max_sum = max(max_sum, j + b[i]); } } if (max_sum > S) max_sum = S; if (min_sum > S) { dp = vector (S + 1, 0); break; } for (int j = max(0, S - max_sum); j <= S; ++j) { int current = j; for (int k = a[i]; k <= b[i]; ++k) { if (current - k >= 0 && dp[current - k] > 0) { dp[current] += dp[current - k]; } } } } cout << dp[S] << endl; return 0;}
???????????????????????????????????????????
转载地址:http://vdgf.baihongyu.com/