动态规划。m=2时,它的情况数显对于任意n=i,其情况数cas[m][i]等于cas[m][i-1]+cas[m][i-2]。因为从cas[m][i-1]变为cas[m][i],可能的情况有两种:第i个坑有核物质,第i个坑没有核物质。有核物质时,其情况数等于cas[m][i-2],因为要空出第i-1个坑,剩余的情况数就是当n=i-2时的情况数;无核物质时情况数就是n=i-1时的情况数。附代码:
#include <iostream> using namespace std; int main() { int n, m; long long cas[6][51]; cas[1][1]=1; for(int i=2; i<6; ++i) cas[i][1]=2; for(int i=2; i<6; ++i) for(int j=2; j<51; ++j) { if(j<=i) cas[i][j]=cas[i-1][j-1]+cas[i][j-1]; else { cas[i][j]=cas[i][j-1]; for(int k=1; k<i; ++k) cas[i][j]+=cas[i][j-k-1]; } } while(cin>>n>>m) cout<<cas[m][n]<<endl; return 0; }
动态规划。m=2时,它的情况数显对于任意n=i,其情况数cas[m][i]等于cas[m][i-1]+cas[m][i-2]。因为从cas[m][i-1]变为cas[m][i],可能的情况有两种:第i个坑有核物质,第i个坑没有核物质。有核物质时,其情况数等于cas[m][i-2],因为要空出第i-1个坑,剩余的情况数就是当n=i-2时的情况数;无核物质时情况数就是n=i-1时的情况数。附代码: