hdu 2152 Fruit


Fruit
Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 3211    Accepted Submission(s): 1820
Problem Description
またたく間に収穫の季節になって、TTの専門の指導があるため、Leleは大豊作を獲得しました.特に果物、Leleは全部でN種類の果物を植えて、りんご、梨、バナナ、スイカがあります......味がおいしいだけではなくて、様子は更にきれいです.
そこで、多くの人々が名を慕って来て、Leleを探して果物を買いました.
有名なHDU ACM総教頭lcyまで来た.lcyは100元札を投げて、「M個の果物からなる果物の盛り合わせを買いたいのですが、私には小さな要求があります.果物ごとに、個数に制限があります.特定の値よりも少なくても、特定の値よりも大きくてもいけません.そして、同じ盛り合わせを2つは要りません.あなたは勝手に組み合わせて、あなたはいくつかの異なる案を組み合わせることができて、私は何部買いますか?」
今、Leleを手伝ってもらい、lcyにどれだけの果物の盛り合わせが売れるか計算してあげましょう.
注意、果物は1つを基本単位とし、これ以上分けることはできません.2つのスキームについて、各果物の数が同じであれば、この2つのスキームは同じであると考えられる.
結局Leleはこのお金をもらって、また彼の学業を続けることができます~
 
Input
この問題には複数のテストが含まれています.ファイルの終了(EOF)まで処理してください.
各グループのテストの最初の行は2つの正の整数NとMを含む(意味は問題の説明を参照して、0次にN行の果物の情報があって、1行ごとに2つの整数A,B(0<=A<=B<=100)は、少なくともこの果物A個を買う必要があることを示して、せいぜいこの果物B個しか買えない.
 
Output
各グループのテストについて、合計で販売できるシナリオ数を1行に出力します.
タイトルデータはこの答えが10^9未満であることを保証します.
 
Sample Input

   
   
   
   
2 3 1 2 1 2 3 5 0 3 0 3 0 3

 
Sample Output

   
   
   
   
2 12
 /* :     , , 。   */
#include<cstdio>
#include<cstring>
int main()
{
    int n,m,a[1010],b[1010],i,j,k,c1[1010],c2[1010];
    while(scanf("%d %d",&n,&m)!=EOF)
    {
        memset(a,0,sizeof(a));
         memset(b,0,sizeof(b));
         memset(c1,0,sizeof(c1));
         memset(c2,0,sizeof(c2));
        for(i=1; i<=n; i++)
            scanf("%d %d",&a[i],&b[i]);
        for(i=a[1]; i<=b[1]; i++)    //                
            c1[i]=1;
        for(i=2; i<=n; i++)          //n   ,n    
        {       
            for(j=0; j<=m; j++)      //      ,      m 。 
            {      
                for(k=a[i]; k+j<=m&&k<=b[i]; k++)  // i      a[i]    b[i] ,         m 
                {    
                    c2[k+j]+=c1[j];
                }
            }
            for(j=0; j<=m; j++)
            {
                c1[j]=c2[j];
                c2[j]=0;
            }
        }
        printf("%d
",c1[m]); } return 0; }