### 题意 现有红蓝两种宝石,每种宝石都有分不同的level 最开始给定一个level为n的红宝石,可以进行如下转化: (两种操作)(把level位n的红宝石简称为红n) 1. 把1个红n变成: 1个红n-1 + X个蓝n 2. 把1个蓝n变成: 1个红n-1 + Y个蓝n-1 问最多能有多少个蓝1 ### 分析 模拟递推式即可,注意要先处理2.再处理1.,因为蓝n可以在1.中产生,所以要先求出他的值 bi 表示为 1 个level为 i 的蓝宝石能够产生多少个level为1的蓝宝石, ri 表示为 1 个level为 i 的红宝石能够产生多少个level为1的蓝宝石。 ```cpp #include #define int long long using namespace std; int r[15], b[15]; signed main () { int n, x, y; cin >> n >> x >> y; if (n < 2) { cout << 0; return 0; } r[1] = 0, b[1] = 1; for (int i = 2; i <= n; i ++) { b[i] = r[i-1] + b[i-1] * y; //先更新他,因为后面要按用到b[i] r[i] = r[i-1] + b[i] * x; } cout << r[n] << endl; } //两种操作 //1. 把1个红n变成: 1个红n-1 + X个蓝n //2. 把1个蓝n变成: 1个红n-1 + Y个蓝n-1 //问最多能有多少个蓝1 //好小的范围 //蓝的里面还有红的 //递推,预处理 //模拟递推式即可 ```