为什么new bool会报错,改成new long 就对了?(本地没问题)
查看原帖
为什么new bool会报错,改成new long 就对了?(本地没问题)
858145
hdmgydkn楼主2024/3/3 21:23
#include <iostream>
#include <vector>
using namespace std;
vector<size_t> ans;
int main(){
    size_t n,*dp;
    bool *judge;
    cin>>n;
    judge=new bool[n+1]{0};
    dp=new size_t[n+1]{1};
    for(size_t i=2;i<=n;i++){
        if(!judge[i]) ans.push_back(i);
        for(size_t j=0,end=(size_t)n/i;ans[j]<=end;j++){
            judge[i*ans[j]]=true;
            if(!i%ans[j]) break;
        }
    }
    delete[] judge;
    for(size_t val:ans)
        for(size_t i=val;i<=n;i++)
            dp[i]+=dp[i-val];
    cout<<dp[n]<<endl;
    delete[] dp;
    return 0;
}//原始代码

是八个RE。

#include <iostream>
#include <vector>
using namespace std;
vector<size_t> ans;
int main(){
    size_t n,*dp;
    size_t *judge;
    
    
    //把bool改成size_t
    
    
    cin>>n;
    judge=new size_t[n+1]{0};
    dp=new size_t[n+1]{1};
    for(size_t i=2;i<=n;i++){
        if(!judge[i]) ans.push_back(i);
        for(size_t j=0,end=(size_t)n/i;ans[j]<=end;j++){
            judge[i*ans[j]]=true;
            if(!i%ans[j]) break;
        }
    }
    delete[] judge;
    for(size_t val:ans)
        for(size_t i=val;i<=n;i++)
            dp[i]+=dp[i-val];
    cout<<dp[n]<<endl;
    delete[] dp;
    return 0;
}

就AC了
各位知道为什么吗? 求大佬解答!!!

2024/3/3 21:23
加载中...