#网易互娱笔试第二题
笔试的时候差一点就写出来了,但是最后只能无奈骗分5%,考试的时候dfs老是写不对,快麻了,下面是我考完写出来的,应该是正确的,通过了一些测试用例。
#include<iostream>
using namespace std;
void dfs(int n,int m,int res,int i,int count,int& maxres,int num){
if(num==m&&count==n){
if(maxres<res){
maxres=res;
}
return;
}
if(count==n){
return;
}
for(int j=1;j<8;++j){
num=num+j;
if(j==i){
++res;
}
++count;
dfs(n,m,res,i,count,maxres,num);
if(j==i){
--res;
}
--count;
num=num-j;
if(count==0){
return;
}
}
}
int main(){
int n,m;
cin>>n>>m;
for(int i=1;i<8;++i){
int num=i;
int maxres=1;
int res=1;
int count=1;
dfs(n,m,res,i,count,maxres,num);
cout<<maxres<<endl;
}
}
#include<iostream>
using namespace std;
void dfs(int n,int m,int res,int i,int count,int& maxres,int num){
if(num==m&&count==n){
if(maxres<res){
maxres=res;
}
return;
}
if(count==n){
return;
}
for(int j=1;j<8;++j){
num=num+j;
if(j==i){
++res;
}
++count;
dfs(n,m,res,i,count,maxres,num);
if(j==i){
--res;
}
--count;
num=num-j;
if(count==0){
return;
}
}
}
int main(){
int n,m;
cin>>n>>m;
for(int i=1;i<8;++i){
int num=i;
int maxres=1;
int res=1;
int count=1;
dfs(n,m,res,i,count,maxres,num);
cout<<maxres<<endl;
}
}
全部评论
第二题不是列个式子o1时间复杂度就好了嘛
这个题用二分,100%通过
做题前要有看数据量的习惯,来大致判断时空复杂度,这种时空复杂度就在明示你了去找O(1)的解法,不然不可能通过的
这题使用公式常数时间复杂度解决的,dfs过不了
贪心
我也写的类似深搜只能过15% 数据范围是10e9太大了
相关推荐
点赞 评论 收藏
分享
点赞 评论 收藏
分享

