poj1664解题报告

//DP问题:a[i][j]=a[i][j-1]+a[i-j][x]:x属于i-j,j中较小的 //a[x][1]=1 //a[1][x]=1 //a[x][y]=a[x][x];当且x<=y //author:wei.steve #include <iostream> #include <algorithm> #include <cmath> #include <string> #include <set> #include <queue> #include <map> using namespace std; int main() { //freopen("test.txt","r",stdin); int apple[11][11]; int i,j,k,n,m,t,ans; cin>>t; while(t--) { ans=0; cin>>m>>n; for(i=1;i<=m;i++) { for(j=1;j<=m;j++)apple[i][j]=0; apple[i][i]=apple[i][1]=1; } for(i=3;i<=m;i++) { for(j=2;j<i&&j<=n;j++) { for(k=1;k<=i-j&&k<=j;k++) apple[i][j]+=apple[i-j][k]; } } for(k=1;k<=n&&k<=m;k++)ans+=apple[m][k]; cout<<ans<<endl; } return 0; }

你可能感兴趣的:(apple)