程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> hdu 2152 Fruit 母函數之取的個數有最大最小要求

hdu 2152 Fruit 母函數之取的個數有最大最小要求

編輯:C++入門知識

Fruit
Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 1781    Accepted Submission(s): 1035


Problem Description
轉眼到了收獲的季節,由於有TT的專業指導,Lele獲得了大豐收。特別是水果,Lele一共種了N種水果,有蘋果,梨子,香蕉,西瓜……不但味道好吃,樣子更是好看。

於是,很多人們慕名而來,找Lele買水果。

甚至連大名鼎鼎的HDU ACM總教頭 lcy 也來了。lcy拋出一打百元大鈔,"我要買由M個水果組成的水果拼盤,不過我有個小小的要求,對於每種水果,個數上我有限制,既不能少於某個特定值,也不能大於某個特定值。而且我不要兩份一樣的拼盤。你隨意搭配,你能組出多少種不同的方案,我就買多少份!"

現在就請你幫幫Lele,幫他算一算到底能夠賣出多少份水果拼盤給lcy了。

注意,水果是以個為基本單位,不能夠再分。對於兩種方案,如果各種水果的數目都相同,則認為這兩種方案是相同的。

最終Lele拿了這筆錢,又可以繼續他的學業了~
 

Input
本題目包含多組測試,請處理到文件結束(EOF)。
每組測試第一行包括兩個正整數N和M(含義見題目描述,0<N,M<=100)
接下來有N行水果的信息,每行兩個整數A,B(0<=A<=B<=100),表示至少要買該水果A個,至多只能買該水果B個。
 

Output
對於每組測試,在一行裡輸出總共能夠賣的方案數。
題目數據保證這個答案小於10^9
 

Sample Input
2 3
1 2
1 2
3 5
0 3
0 3
0 3
 
[cpp] 
#include<stdio.h> 
#include<string.h> 
int max[105],min[105]; 
int c1[10050],c2[10050]; 
int main() 

     int n,m,i,j,k,ans; 
     while(scanf("%d %d",&n,&m)!=EOF) 
     { 
         ans=0; 
         for(i=1;i<=n;i++) 
         { 
             scanf("%d %d",&min[i],&max[i]); 
         } 
         memset(c1,0,sizeof(c1)); 
         memset(c2,0,sizeof(c2)); 
         for(i=min[1];i<=max[1];i++) 
             c1[i]=1; 
     
         for(i=2;i<=n;i++) 
         {     
             for(j=0;j<=m;j++) 
                 for(k=min[i];k<=max[i]&&k+j<=m;k++) 
                     c2[k+j]+=c1[j]; 
             for(j=0;j<=m;j++) 
             { 
                 c1[j]=c2[j]; 
                 c2[j]=0; 
             } 
         } 
         printf("%d\n",c1[m]); 
     } 
     return 0; 

我個人感覺用指數型母函數也可以 但是只拍出來了一個連樣例都過不去的代碼

我個人感覺沒錯啊  為什麼就不對嗎  求解釋  貼下錯誤代碼

#include<stdio.h>
#include<string.h>
int max[105],min[105];
double c1[10050],c2[10050];
double jc[105];
void get()
{
 int i;
 jc[0]=1;
 for(i=1;i<=100;i++)
  jc[i]=jc[i-1]*i;
}

int main()
{
     int n,m,i,j,k,ans;
  get();
  while(scanf("%d %d",&n,&m)!=EOF)
  {
   ans=0;
   for(i=1;i<=n;i++)
   {
    scanf("%d %d",&min[i],&max[i]);
   }
   memset(c1,0,sizeof(c1));
   memset(c2,0,sizeof(c2));
   for(i=min[1];i<=max[1];i++)
    c1[i]=1.0/jc[i];
 
   for(i=2;i<=n;i++)
   {
    for(j=0;j<=m;j++)
     for(k=min[i];k<=max[i]&&k+j<=m;k++)
      c2[k+j]+=c1[j]/jc[k];
       for(j=0;j<=m;j++)
    {
     c1[j]=c2[j];
     c2[j]=0;
    }
   }
   printf("%.0lf\n",c1[m]);
  }
  return 0;
}


 

Sample Output
2
12
 

Author
Linle
 

Source
ACM程序設計期末考試——2008-01-02(3 教417)


作者:hnust_xiehonghao

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved