1. 程式人生 > >杭電ACM hdu 2152 Fruit 解題報告(母函式)

杭電ACM hdu 2152 Fruit 解題報告(母函式)

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

Sample Output
2
12



Author
Linle

Source
ACM程式設計期末考試——2008-01-02

Solution

以下部分的版權歸本人(小飛)所有。所有權利保留。

歡迎轉載,轉載時請註明出處:

本題直接套用母函式模板即可。關於母函式的詳細解釋請看:

這裡順便演示一下,對於一般的題目,兩個模板都可以解決問題。

首先套用第一個模板。程式碼如下:


#include <iostream>
#include <cstring>
using namespace std;
#define min(a,b) ((a)<(b)?(a):(b))
int N,M,n1[200],n2[200],i,j,k;
int a[200],b[200];
int main()
{
	while (cin>>N>>M)
	{
		for (i=0;i<N;i++)
			cin>>n1[i]>>n2[i];
		memset(a,0,sizeof(a));
		a[0]=1;
		for (i=0;i<N;i++)
		{
			memset(b,0,sizeof(b));
			for (j=n1[i];j<=n2[i]&&j<=M;j++)
				for (k=0;k<=M&&k+j<=M;k++)
					b[k+j]+=a[k];
			memcpy(a,b,sizeof(b));
		}
		cout<<a[M]<<endl;
	}
	return 0;
}

下來套用第二個模板。程式碼如下:
#include <iostream>
#include <cstring>
using namespace std;
#define min(a,b) ((a)<(b)?(a):(b))
int N,M,n1[200],n2[200],i,j,k,last,last2;
int a[200],b[200];
int main()
{
	while (cin>>N>>M)
	{
		for (i=0;i<N;i++)
			cin>>n1[i]>>n2[i];
		a[0]=1;
		last=0;
		for (i=0;i<N;i++)
		{
			last2=min(last+n2[i],M);
			memset(b,0,sizeof(int)*(last2+1));
			for (j=n1[i];j<=n2[i]&&j<=last2;j++)
				for (k=0;k<=last&&k+j<=last2;k++)
					b[k+j]+=a[k];
			memcpy(a,b,sizeof(int)*(last2+1));
			last=last2;
		}
		if (last>=M)
			cout<<a[M]<<endl;
		else
			cout<<0<<endl;
	}
	return 0;
}


相關推薦

ACM hdu 2152 Fruit 解題報告函式

Problem Description 轉眼到了收穫的季節,由於有TT的專業指導,Lele獲得了大豐收。特別是水果,Lele一共種了N種水果,有蘋果,梨子,香蕉,西瓜……不但味道好吃,樣子更是好看。 於是,很多人們慕名而來,找Lele買水果。 甚至連大名鼎鼎的HDU ACM

ACM hdu 2082 找單詞 解題報告函式

Problem Description 假設有x1個字母A, x2個字母B,..... x26個字母Z,同時假設字母A的價值為1,字母B的價值為2,..... 字母Z的價值為26。那麼,對於給定的字母,可以找到多少價值<=50的單詞呢?單詞的價值就是組成一個單詞的所有

ACM hdu 2079 選課時間 解題報告函式

Problem Description 又到了選課的時間了,xhd看著選課表發呆,為了想讓下一學期好過點,他想知道學n個學分共有多少組合。你來幫幫他吧。(xhd認為一樣學分的課沒區別)Input輸入資料的第一行是一個數據T,表示有T組資料。每組資料的第一行是兩個整數n(1

acm公選課作業解題報告——第三章 貪心演算法。

課堂筆記: 在對問題求解時,總是作出在當前看來是最好的選擇。也就是說,不從整體上加以考慮,它所作出的僅僅是在某種意義上的區域性最優解(是否是全域性最優,需要證明)。很多貪心型別的題目都不是最樸素的貪心,而是需要做一些變化,對於我們,關鍵是找到貪心的本質! 求解基本步驟:

ACM hdu 2079 選課時間 模板

Problem Description 又到了選課的時間了,xhd看著選課表發呆,為了想讓下一學期好過點,他想知道學n個學分共有多少組合。你來幫幫他吧。(xhd認為一樣學分的課沒區別) Input輸入資料的第一行是一個數據T,表示有T組資料。每組資料的第一行是兩個整數n(1 <= n <

ACMHDU 1002 A + B Problem II

題目連結:http://acm.hdu.edu.cn/showproblem.php?pid=1002 題目: Problem Description I have a very simple problem for you. Given two integers A

ACM HDU Train Problem I

Train Problem I Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 25008    Accepte

[TJOI2017] DNA 解題報告 hash+二分

log h+ get www. signed targe 相差 ria type 題目鏈接:https://www.luogu.org/problemnew/show/P3763 題目大意: 給定原串S0,詢問S0有多少個子串和給定串S相差不到3個字母 題解: 我們

Codeforces 514C. Watto and Mechanism解題報告字典樹

test names cin 單詞 turn void can include 傳送門 傳送門 題意:給你一個字典和一些詢問,問你對於每個詢問的字符串必須更改一個字符,能否得到字典中的某一個單詞。 思路:先構造一顆字典樹,然後搜一遍就行了,要註意strlen不能每次都用,常

[JZOJ 5906] [NOIP2018模擬10.15] 傳送門 解題報告樹形DP

nor dos color 樹形dp getchar() 傳送門 noip 轉化 每一個 題目鏈接: https://jzoj.net/senior/#contest/show/2528/2 題目: 8102年,Normalgod在GLaDOS的幫助下,研制出了傳

[jzoj 5178] [NOIP2017提高組模擬6.28] So many prefix? 解題報告KMP+DP

題目連結: https://jzoj.net/senior/#main/show/5178 題目: 題解: 我們定義$f[pos]$表示以位置pos為字尾的字串對答案的貢獻,答案就是$\sum_{i=1}^{n} f[i]$ 考慮怎麼得到f陣列,我們有$f[i]=f[nxt[i]]+[i是偶數]

hdu1258---Sum It Up解題報告DFS入門

                                         &n

[JZOJ 5912] [NOIP2018模擬10.18] VanUSee 解題報告 KMP+博弈

題目連結: https://jzoj.net/senior/#contest/show/2530/2 題目:   眾所周知,cqf童鞋對哲學有著深入的理解和認識,並常常將哲學思想應用在實際生活中,例如鍛鍊摔角技術或者研究化(fa)學。  由於cqf童鞋哲學造詣太過高深,以至

[JZOJ 5852] [NOIP2018提高組模擬9.6] 相交 解題報告 倍增+LCA

題目連結: http://172.16.0.132/senior/#main/show/5852 題目: 題目大意: 多組詢問,每次詢問樹上兩條鏈是否相交 題解: 兩條鏈相交併且僅當某一條鏈的兩個端點的LCA在另一個端點上 對於每次詢問,我們分別處理出兩條鏈端點的LCA,通過倍增判斷是否存在

POJ 2406 Power Strings 解題報告雜湊

Power Strings Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 32810 Accepted: 13670 Description Given two strings a and b

poj2502解題報告Dijskstra演算法

題目大意:在一個城市裡,分佈著若干條地鐵線路,每條地鐵線路有若干個站點,所有地鐵的速度均為40km/h。現在你知道了出發地和終點的座標,以及這些地鐵線路每個站點的座標,你的步行速度為10km/h,且你到了地鐵的任意一個站之後就剛好有地鐵出發。問你從出發點到終點最少需要多少時

UVa 1451 Average 解題報告斜率優化

1451 - Average Time limit: 3.000 seconds A DNA sequence consists of four letters, A, C, G, and T. The GC-ratio of a DNA sequence is the

Perfect Pth Powers解題報告張宇

J - Perfect Pth Powers Time Limit:1000MS     Memory Limit:10000KB     64bit IO Format:%I64d & %I64u Description We say t

HDU 2152函式

Problem Description 轉眼到了收穫的季節,由於有TT的專業指導,Lele獲得了大豐收。特別是水果,Lele一共種了N種水果,有蘋果,梨子,香蕉,西瓜……不但味道好吃,樣子更是好看。 於是,很多人們慕名而來,找Lele買水果。 甚至連大名鼎鼎的HDU ACM

整數劃分解題報告DP方法

1.問題描述: 給定一個正整數N和K 1.> 將n劃分成若干正整數之和的劃分數。 2.> 將n劃分成k個正整數之和的劃分數。 3.> 將n劃分成最大數不超過k的劃分數。 4.> 將n劃分成若干奇正整數之和的劃分數。 5.> 將n劃分成若干不同整數之和的劃分數。2.問題分