POJ2279 DP
注意会爆内存
先放这里,以后优化。
1 #include<iostream> 2 #include<cstring> 3 #include<cstdio> 4 #define min(a,b) ((a)<(b)?(a):(b)) 5 using namespace std; 6 int f[31][31][31][31][31];long long int ans; 7 8 9 10 void dp(int *q){ 11 memset(f,0,sizeof(f)); 12 f[0][0][0][0][0]=1; 13 for(int i1=0;i1<=q[1];i1++) 14 for(int i2=0;i2<=q[2];i2++) 15 for(int i3=0;i3<=q[3];i3++) 16 for(int i4=0;i4<=q[4];i4++) 17 for(int i5=0;i5<=q[5];i5++){ 18 19 if(i1<q[1]) f[i1+1][i2][i3][i4][i5]+=f[i1][i2][i3][i4][i5]; 20 if(i2<q[2]&&i2<i1) f[i1][i2+1][i3][i4][i5]+=f[i1][i2][i3][i4][i5]; 21 if(i3<q[3]&&i3<i2&&i3<i1) f[i1][i2][i3+1][i4][i5]+=f[i1][i2][i3][i4][i5]; 22 if(i4<q[4]&&i4<i3&&i4<i2&&i4<i1) f[i1][i2][i3][i4+1][i5]+=f[i1][i2][i3][i4][i5]; 23 if(i5<q[5]&&i5<i4&&i5<i3&&i5<i2&&i5<i1) f[i1][i2][i3][i4][i5+1]+=f[i1][i2][i3][i4][i5]; 24 25 26 } 27 28 cout<<f[q[1]][q[2]][q[3]][q[4]][q[5]]<<endl; 29 // ans=(long long int)f[q[1]][q[2]][q[3]][q[4]][q[5]]; 30 } 31 32 33 int main(){ 34 int k=0,q[6]; 35 while((cin>>k)&&k){ 36 memset(q,0,sizeof(q)); 37 for(int i=1;i<=k;i++){ 38 cin>>q[i]; 39 // cerr<<"This num is "<<q[k]<<endl; 40 } 41 42 dp(q); 43 // printf("%lld",ans); 44 } 45 //printf("YES"); 46 return 0; 47 }

浙公网安备 33010602011771号