dfs(已剪枝)TLE60pts(#4#5T)求救
查看原帖
dfs(已剪枝)TLE60pts(#4#5T)求救
1074084
asd890123楼主2024/6/18 20:14
#include <iostream>
#include <vector>
#include <map>

int n,k,ans = 0;
std::vector <int> nums;
std::map <std::vector <int>,bool> vis;

void dfs(int num,int sum){
    
    if (num + sum > n || nums.size() >= k || sum >= n){
        
        if (sum == n && nums.size() == k && !vis[nums]) ans++,vis[nums] = true;
        return;
        
    }
    dfs(num + 1,sum);
    if (nums.empty() || nums.back() <= num){
        
        nums.push_back(num);
        dfs(num,sum + num);
        nums.pop_back();
        
        nums.push_back(num);
        dfs(num + 1,sum + num);
        nums.pop_back();
        
    }
    
}//正在考虑是否选择整数num,以选择的数和为sum,数量为nums.size()

int main(){
    
    std::ios::sync_with_stdio(0);
    std::cin.tie(0),std::cout.tie(0);
    
    std::cin >> n >> k;
    dfs(1,0);
    std::cout << ans << '\n';
    
    return 0;
}
2024/6/18 20:14
加载中...