国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

HDU2079 ACM 母函數 解決

2019-11-08 02:46:52
字體:
來源:轉載
供稿:網友

選課時間(題目已修改,注意讀題)

Time Limit: 1000/1000 MS (java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 4519    Accepted Submission(s): 3507PRoblem Description又到了選課的時間了,xhd看著選課表發呆,為了想讓下一學期好過點,他想知道學n個學分共有多少組合。你來幫幫他吧。(xhd認為一樣學分的課沒區別) Input輸入數據的第一行是一個數據T,表示有T組數據。每組數據的第一行是兩個整數n(1 <= n <= 40),k(1 <= k <= 8)。接著有k行,每行有兩個整數a(1 <= a <= 8),b(1 <= b <= 10),表示學分為a的課有b門。 Output對于每組輸入數據,輸出一個整數,表示學n個學分的組合數。 Sample Input
22 21 22 140 81 12 23 24 25 86 97 68 8 Sample Output
2445 

這個題 方法也很多, 這里用的母函數 來解決

母函數 

http://blog.csdn.net/sizaif/article/details/55669439

//2079 組合數問題  母函數問題 #include<iostream>#include<cstring>#define min(a,b) ((a)<(b)?(a):(b))  using namespace std;//int min(int a,int b)//{//	return a<b?a:b;//}int main(){	int last,last2;	int i,j,k,nn,T,m;	int v[55],n[55],a[200000],b[200000];	while(cin>>T)	{		while(T--)		{			cin>>nn>>m;			for(i=0;i<m;i++)			{				cin>>v[i]>>n[i];			}			last=0;			a[0]=1;			for(i=0;i<m;i++)			{  				last2=min(last+v[i]*n[i],nn);				memset(b,0,sizeof(int)*(last2+1));				for(j=0;j<=n[i]&&j*v[i]<=last2;j++)//n[i] 表示 有幾門課 					for(k=0;k<=last&&k+j*v[i]<=last2;k++)						b[k+j*v[i]]+=a[k];//v[i]表示學分 				memcpy(a,b,sizeof(int)*(last2+1));				last=last2;			}//			for(i=0;i<last;i++)//				cout<<a[i]<<" "<<i<<" "<<last<<endl;			cout<<a[nn]<<endl;					}	}	return 0;}


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 尼勒克县| 四会市| 南陵县| 梧州市| 万盛区| 普兰店市| 柏乡县| 葵青区| 福鼎市| 蓬溪县| 南陵县| 新宾| 增城市| 德阳市| 桂东县| 桐城市| 秀山| 凤庆县| 湖南省| 泸水县| 江油市| 轮台县| 晋江市| 灌南县| 阿拉善右旗| 横峰县| 常宁市| 青海省| 来凤县| 龙州县| 稻城县| 集贤县| 息烽县| 永修县| 新营市| 日照市| 张家界市| 西宁市| 丁青县| 太白县| 广宗县|