国产探花免费观看_亚洲丰满少妇自慰呻吟_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;}


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 辰溪县| 资中县| 高清| 兴山县| 邛崃市| 信阳市| 桃江县| 龙里县| 永德县| 临邑县| 柘城县| 宜春市| 南安市| 迭部县| 兴海县| 黔西县| 三明市| 丹阳市| 朝阳县| 元氏县| 达拉特旗| 滁州市| 正蓝旗| 拉萨市| 垣曲县| 平度市| 博罗县| 尚义县| 灵丘县| 淮滨县| 文登市| 名山县| 仁怀市| 宜丰县| 霍林郭勒市| 青河县| 张北县| 灵璧县| 梓潼县| 兴山县| 南靖县|