func_code_string: #include <bits/stdc++.h>   using namespace std;   const int inf = 1e8;   struct node {     int x, y, z, s;   } pre[12][18][18][18];   int n, a, b, dp[12][18][18][18], h[12];   vector<int> ans;   void f(int i, int x, int y, int z, int v, int xx, int yy, int zz, int s) {     x = max(0, x);     y = max(0, y);     z = max(0, z);     if (dp[i][x][y][z] > v) {       dp[i][x][y][z] = v;       pre[i][x][y][z] = (node){xx, yy, zz, s};     }   }   void find(int i, int x, int y, int z) {     node tmp = pre[i][x][y][z];     int s = tmp.s;     for (int j = 0; j < s; j++) {       ans.push_back(i);     }     if (i == 2) {       return;     }     find(i - 1, tmp.x, tmp.y, tmp.z);   }   int main() {     scanf( %d%d%d , &n, &a, &b);     for (int i = 1; i <= n; i++) {       scanf( %d , &h[i]);       h[i]++;     }     for (int i = 0; i <= n; i++) {       for (int x = 0; x <= 16; x++) {         for (int y = 0; y <= 16; y++) {           for (int z = 0; z <= 16; z++) {             dp[i][x][y][z] = inf;           }         }       }     }     f(1, h[1], h[2], h[3], 0, 0, 0, 0, 0);     for (int i = 1; i < n - 1; i++) {       int z = h[i + 2];       for (int x = 0; x <= h[i]; x++) {         for (int y = 0; y <= h[i + 1]; y++) {           int v = dp[i][x][y][z];           if (v >= inf) {             continue;           }           for (int j = (x + b - 1) / b;; j++) {             f(i + 1, y - j * a, z - j * b, h[i + 3], v + j, x, y, z, j);             if (j * a > y && j * b > z) {               break;             }           }         }       }     }     find(n - 1, 0, 0, 0);     cout << ans.size() << endl;     for (int i = 0; i < ans.size(); i++) {       printf( %d  , ans[i]);     }     return 0;   }   