Fruit - http://acm.hdu.edu.cn/showproblem.php?pid=2152
代码
#include<bits/stdc++.h>
using namespace std;
#define MXNM 10010
#define MXN 110
int main(){
int N, M, Sa, Sb, c1[MXNM], c2[MXNM], A[MXN], B[MXN];
while(scanf("%d%d", &N, &M) == 2){
memset(c1, 0, sizeof c1);
memset(c2, 0, sizeof c2);
Sa = 0, Sb = 0;
for(int i = 0; i < N; i++) scanf("%d %d", A+i, B+i);
for(int i = A[0]; i <= B[0]; i++) c1[i] = 1;
Sa = A[0], Sb = B[0];
for(int i = 1; i < N; i++){
for(int j = Sa; j <= Sb; j++){
for(int k = A[i]; k <= B[i] && j+k <= M; k++){
c2[j+k] += c1[j];
}
}
Sa = min(Sa, A[i]), Sb += B[i];
for(int j = Sa; j <= Sb; j++) c1[j] = c2[j], c2[j] = 0;
}
printf("%d\n", c1[M]);
}
return 0;
}