@[eb0ycn](/user/536337) 你得搜索逻辑有点混乱,不妨设置递归函数int f(int n,int m)含义为当前剩余n篇论文,还有m个课题可供选择的情况下,最小花费时间
```cpp
ll f(int n, int m) {
// 论文剩余0篇,需要0时间
if (n == 0) {
return 0;
}
if (m == 0 && n > 0) {
// 永远完不成了
return INT_MAX / 3;
}
if (dp[n][m] != -1) return dp[n][m];
// 当前课题可以选择完成论文数量
ll ans = INT_MAX / 3;
for (int i = 0; i <= n; ++i) {
// 当前论文需要的时间
ll t = (ll) (nums[m].a * pow(i, nums[m].b));
ans = min(ans, t + f(n - i, m - 1));
}
dp[n][m] = ans;
return ans;
}
```
by yuelaiyuecai @ 2023-12-29 11:12:07