C++信息学奥赛1192
#include <bits/stdc++.h> using namespace std; const int len = 15; // 用于展示我们我们所推导出的所有情况 void show(int x[len][len]) { for(int i=0;i<=10;i++) { for(int j=0;j<=10;j++) { cout << x[i][j] << " "; } cout << endl; } } int main() { int x[len][len]={0}; // m代表苹果数,n代表盘子数 int m,n; // 没有盘子和只有一个盘子的情况 for(m=0;m<len;m++) x[m][0] = x[m][1] = 1; // 没有苹果和只有一个苹果的情况 for(n=0;n<len;n++) x[0][n] = x[1][n] = 1; // 其他情况 for(m=2;m<len;m++) { for(int n=2;n<len;n++) { // 苹果比盘子少,多余的空盘子可以忽略 if(m<n) x[m][n] = x[m][m]; // 苹果比盘子多 else x[m][n] = x[m-n][n] + x[m][n-1]; } } // show(x); int f; cin >> f; for(int i=0;i<f;i++) { cin >> m >> n; cout << x[m][n]; } return 0; }