package com.raylew.algorithm.ntoj;
/*
小王是通中的学生,打算参加物理竞赛,于是计划在寒假里强化一下物理竞赛习题。
他从图书馆借了一套物理竞赛习题集。他决定在以后的n天里要做完上面的S道习题。
为了能够尽快完成任务,小王强迫自己第i天至少要做a[i]道题。
但是,小王在假期里还有其他事情(例如过春节),每天的题量不能太多,他估计了一下,第i天做的题不能超过b[i](b[i]>=a[i])道。
现在小王想知道,究竟能有多少种方案能够在n天里做完这S道物理竞赛习题呢?小王请你写个程序帮他算一算。
具体来说,一个方案就是每天做的题的数目的序列,假设第i天完成x[i]道题(x[i]当然满足a[i]<=i<=b[i],且x[1]+x[2]+......+x[n]=S)。
那么向量(x[1],x[2],...,x[n])就对应了一个方案。两个方案是指他们对应的向量不同。
一共n+1行,第一行是两个整数n和S,用空格分开,分别表示天数和题目数(1<=n<=20,1<=S<=1000);
接下来n行每行两个整数,之间用空格隔开,分别表示第i天对做题数量的限制a[i]和b[i](0<=a[i]<=b[i]<=S)。
一个整数,表示满足条件的方案数T。
样例输入
3 11
2 5
1 6
3 4
样例输出
8
*/
public class B0010 {
static int[] a = {2, 1, 3};
static int[] b = {5, 6, 4};
static int count = 0;
static int n;
static int sum = 0;
static boolean ok = false;
/**
* @param args
*/
public static void main(String[] args) {
/*
Scanner scanner = new Scanner(System.in);
int days = scanner.nextInt();
int total = scanner.nextInt();
n = total;
a = new int[days];
b = new int[days];
int[] c = new int[days];
for (int i = 0; i < days; i++) {
a[i] = scanner.nextInt();
b[i] = scanner.nextInt();
}
*/
// 爆破法
judge(0);
System.out.println(count);
}
public static void judge(int days) {
if (days == 3) {
if (sum == 11) {
count++;
}
} else {
for (int x = a[days]; x <= b[days]; x++) {
sum = sum + x;
judge(days + 1);
sum = sum - x;
}
}
}
}