1.记忆化搜索就可以了#include<bits/stdc++.h>using namespace std;const int N=2e6+10;vector<int>a;int dp[N][2][4];int dfs(int u,int col,int k){ int &res=dp[u][(col==-1?0:1)][k]; if(res!=-1)return res;        if(u==(int)a.size()-1)    {        if(col!=-1)return a[u];        return 0;    } if(col!=-1)    {        res=max(dfs(u+1,-1,k)+a[u],dfs(u+1,col,k));    } else     {        if(k)res=max(dfs(u+1,a[u],k-1)-a[u],dfs(u+1,col,k));        else res=dfs(u+1,col,k);    }  return res;}void solve(){ memset(dp,-1,sizeof dp); cout<<dfs(0,-1,3)<<endl;  return ;}int main(){ int x; while(cin>>x)    {        a.push_back(x);        char c;        if(cin>>c)continue;        else break;    }    //cout<<a.size()<<endl; solve(); return 0;}2.求范围内质数和的平方根我的做法就是筛质数,然后求根号就可以了。但是不知道为什么只能过0.8我最开始觉得可能是精度问题,但是手写开根号以后,还是只能过0.8 而且中间调试精度以后确实可以过的更多。不知道为什么#include<bits/stdc++.h>using namespace std;const int N=2e6+10;long long sum;bool st[N];void solve(){ int n;cin>>n; vector<int>p; for(int i=2;i<=n;i++) {  if(!st[i])sum+=i;    for(int j=0;j<(int)p.size()&&1ll*p[j]*i<=n;j++)  {   st[p[j]*i]=true;   if(i%p[j]==0)break;  } } cout<<fixed<<setprecision(4)<<sqrt(sum)<<endl; return ;}int main(){  solve(); return 0;}
点赞 1
评论 5
全部评论

相关推荐

07-11 22:27
中南大学 Java
程序员牛肉:学历的话没问题。但是没问题的也就只有学历了。 其实你的整体架构是正确的,博客接着干。但是项目有点过于简单了。从后端的角度上讲,你这也就是刚入门的水平,所以肯定约面试够呛。 如果你要应聘后端岗位,那你第一个项目竟然是仿写操作系统。这个你要面试官咋问你。你一定要记住一点,你简历上写的所有的东西,都是为了证明你有能力胜任当前的岗位,而不是为了证明你自己会什么。 如果你只是浅浅的做几个项目,描述也都是烂大街。技术点也都是各种混水类的配置类需求,那你就不要幻想自己能走多远。一定要保持思考,保持学习。
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务