拼多多第三题回溯超时

#include <iostream>
#include <vector>
using namespace std;

void backtrack(int& res,vector<int>& v,int i,int target,int n)
{
    //超出范围
    if(target<0) return;
    if(target>0&&n==0) return;
    //符合条件
    if(target==0&&n==0)
    {
        res =1;
        return;
    }
    for(int start=i;start<=target;start )
    {
        //到最后一个
        if(n==1)
        {
            v.push_back(target);
            backtrack(res,v,start 1,0,n-1);
            v.pop_back();
            return;
        }
        //第1第2
        v.push_back(start);
        backtrack(res,v,start 1,target-start,n-1);
        v.pop_back();
    }
}
int main()
{
    int n,s;
    int res=0;
    vector<int> v;
    cin>>n>>s;
    backtrack(res,v,1,s,n);
    cout<<(res/2)%1000000007*(res/2)%1000000007<<endl;
    return 0;
}
回溯超时😭有AC的大佬吗😂#拼多多##笔试题目#
全部评论
同超时,这个题目的测试用例真严格,一点没过😂😂
点赞
送花
回复
分享
发布于 2019-08-11 17:15
秒出 最简单的版本!!! //动态规划版本     static int[][] dp;     public static void main(String[] args) {         Scanner in = new Scanner(System.in);         while (in.hasNextInt()) {// 注意,如果输入是多个测试用例,请通过while循环处理多个测试用例             int n =in.nextInt();             int s = in.nextInt();             dp = new int[n+1][s+1];              Arrays.fill(dp[1],1);              dp[1][0] =0;              get(n,s);             System.out.println(dp[n][s]);         }     }     private static void get(int n,int s){         if (dp[n][s] != 0) return ;         for (int i = 2; i <= n; i++) {             for (int j = i+1; j <= s; j++) {                 dp[i][j] = (dp[i][j-i] + dp[i-1][j-i])%1000000007;             }         }     }
点赞
送花
回复
分享
发布于 2019-08-12 00:02
滴滴
校招火热招聘中
官网直投
我也是。。。
点赞
送花
回复
分享
发布于 2019-08-11 17:15
用回溯法在IDE上可以,提交就不行,吐血
点赞
送花
回复
分享
发布于 2019-08-11 17:16
我用dp,o(n^2),也超时,😥😥
点赞
送花
回复
分享
发布于 2019-08-11 17:16
最后想明白了,可是没时间改,觉得要把s拆成每一位去backtrack,
点赞
送花
回复
分享
发布于 2019-08-11 17:21
同回溯超时。
点赞
送花
回复
分享
发布于 2019-08-11 17:22
回溯肯定超时,这个不是可以改成dp做嘛,dp(i,j)表示i个数和为j有dp(i,j)个组合,那么dp(i,j)= sum(dp(i-1,k)) , max((i-1)*i,j/2)<=k<=j-1, 奇偶额外判断一下
点赞
送花
回复
分享
发布于 2019-08-11 17:44
估计不是让用回溯做的,剪枝策略不好的话,最差能跟爆搜接近。吃完饭我试试组合数学的做法。
点赞
送花
回复
分享
发布于 2019-08-11 17:46
是的,我也超时,心累
点赞
送花
回复
分享
发布于 2019-08-11 20:31
老哥有第二题的思路分享下吗?
点赞
送花
回复
分享
发布于 2019-08-15 08:33

相关推荐

点赞 4 评论
分享
牛客网
牛客企业服务