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 }
RE Code

 

posted @ 2018-10-16 16:56  CrazyBoyM  阅读(257)  评论(0)    收藏  举报