标签:
1 #include<iostream> 2 #include<cstdio> 3 #include<cstdlib> 4 #include<cstring> 5 #include<algorithm> 6 #include<cmath> 7 using namespace std; 8 int N,M; 9 int MAX; 10 int temp[50000];//存组合邮票 11 int T[50000]; 12 int vis[50000]; 13 int f[50000];//f[i]=K 表示邮票组成价值i要用 K张 14 void ser(int); 15 void DP(); 16 17 int main(){ 18 cin>>N>>M; 19 ser(1); 20 for(int i=1;i<=M;i++){ 21 cout<<T[i]<<" "; 22 } 23 cout<<endl; 24 cout<<"MAX="<<MAX; 25 return 0; 26 } 27 void ser(int now){ 28 if(now==M+1){ 29 DP(); 30 return ; 31 } 32 else{ 33 for(int i=temp[now-1]*N+1;i>=temp[now-1]+1;i--){ 34 temp[now]=i; 35 ser(now+1); 36 } 37 } 38 } 39 void DP(){ 40 sort(temp+1,temp+M+1); 41 memset(f,0x3f3f3f3f,sizeof(f)); 42 f[0]=0; 43 44 for(int i=1;i<=200;i++){//i表示组成价值 45 for(int j=1;j<=M;j++){//使用第 j张邮票推过来 46 if(i-temp[j]>=0) 47 f[i]=min(f[i],f[i-temp[j]]+1); 48 else ; 49 } 50 if(f[i]<=N){ 51 if(i>MAX){ 52 MAX=i; 53 memcpy(T,temp,sizeof(temp)); 54 } 55 } 56 else return ; 57 } 58 }
标签:
原文地址:http://www.cnblogs.com/CXCXCXC/p/4789764.html