已经用了回溯了,最后一个用例还是TLE,有不用动态规划的优化方法吗?
查看原帖
已经用了回溯了,最后一个用例还是TLE,有不用动态规划的优化方法吗?
1469450
lzdeluogu楼主2025/1/3 23:51
#include<iostream>
#include<vector>
using namespace std;
int n, m, ans; // m为钱数
// 尝试购买第i个商品,m为剩余的钱
void fun(int i, int m, vector<vector<int>>& price) {
    // 如果已经处理完所有商品,检查是否所有商品都已购买
    if (i == n) {
        if (m == 0) {
            ans++;
        }
        return;
    }
    // 如果当前商品已购买,或者剩余的钱不足以购买当前商品,跳过当前商品
    if (price[i][1] == 0 || m - price[i][0] < 0) {
        fun(i + 1, m, price);
        return;
    }
    // 尝试购买当前商品
    price[i][1] = 0; // 标记为已购买
    fun(i + 1, m - price[i][0], price); // 递归处理剩余的钱和商品
    // 回溯,恢复当前商品状态
    price[i][1] = 1; // 标记为未购买
    // 尝试不购买当前商品
    fun(i + 1, m, price);
}
int main() {
    cin >> n >> m;
    vector<vector<int>> price(n, vector<int>(2, 1));
    for (int i = 0; i < n; i++) {
        cin >> price[i][0];
    }
    fun(0, m, price);
    cout << ans << endl;
    return 0;
}

2025/1/3 23:51
加载中...