可能有一点繁琐,请大家宽恕
以下是几回的代码:
#include<iostream>
#include<ctime>
using namespace std;
const int N=10000;
int a[N],b[N],ans,n,m;//分别表示蛋糕,嘴,和,已知蛋糕总数量,已知嘴的总数量
double start_time;//程序起始时间
void dfs(int x,int y){//x是当前考虑到的那张嘴,y是有多少张嘴吃到了蛋糕
if(((clock()-start_time)/CLOCKS_PER_SEC)>0.9){
return;//本题时间限制为1.00s,所以可以用这个函数提高分数
}
if(x==m+1){
ans=max(ans,y);
return;
}
dfs(x+1,y);
for(int i=1;i<=n;i++)
if(a[i]>=b[x]){
a[i]-=b[x];//标记
dfs(x+1,y+1);
a[i]+=b[x];//回溯
}
}
int main(){
start_time=clock();
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
cin>>m;
for(int i=1;i<=m;i++) cin>>b[i];
dfs(1,0);
cout<<ans<<endl;
return 0;
}
这个代码↑↑↑无ios...,>0.9
#include<iostream>
#include<ctime>
using namespace std;
const int N=10000;
int a[N],b[N],ans=0,n,m;//分别表示蛋糕,嘴,和,已知蛋糕总数量,已知嘴的总数量
double start_time;//程序起始时间
void dfs(int x,int y){//x是当前考虑到的那张嘴,y是有多少张嘴吃到了蛋糕
if(((clock()-start_time)/CLOCKS_PER_SEC)>0.99){
return;//本题时间限制为1.00s,所以可以用这个函数提高分数
}
if(x==m+1){
ans=max(ans,y);
return;
}
dfs(x+1,y);
for(int i=1;i<=n;i++)
if(a[i]>=b[x]){
a[i]-=b[x];//标记
dfs(x+1,y+1);
a[i]+=b[x];//回溯
}
}
int main(){
start_time=clock();
ios::sync_with_stdio(0);
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
cin>>m;
for(int i=1;i<=m;i++) cin>>b[i];
dfs(1,0);
cout<<ans<<endl;
return 0;
}
这个代码↑↑↑ ios...在clock()下,>0.99
#include<iostream>
#include<ctime>
using namespace std;
const int N=10000;
int a[N],b[N],ans=0,n,m;;//分别表示蛋糕,嘴,和,已知蛋糕总数量,已知嘴的总数量
double start_time;//程序起始时间
void dfs(int x,int y){//x是当前考虑到的那张嘴,y是有多少张嘴吃到了蛋糕
if(((clock()-start_time)/CLOCKS_PER_SEC)>0.99){
return;//本题时间限制为1.00s,所以可以用这个函数提高分数
}
if(x==m+1){
ans=max(ans,y);
return;
}
dfs(x+1,y);
for(int i=1;i<=n;i++)
if(a[i]>=b[x]){
a[i]-=b[x];//标记
dfs(x+1,y+1);
a[i]+=b[x];//回溯
}
}
int main(){
ios::sync_with_stdio(0);
start_time=clock();
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
cin>>m;
for(int i=1;i<=m;i++) cin>>b[i];
dfs(1,0);
cout<<ans<<endl;
return 0;
}
这个代码↑↑↑ ios...在clock()上,>0.99
#include<iostream>
#include<ctime>
using namespace std;
const int N=10000;
int a[N],b[N],ans,n,m;//分别表示蛋糕,嘴,和,已知蛋糕总数量,已知嘴的总数量
void dfs(int x,int y){//x是当前考虑到的那张嘴,y是有多少张嘴吃到了蛋糕
if(x==m+1){
ans=max(ans,y);
return;
}
dfs(x+1,y);
for(int i=1;i<=n;i++)
if(a[i]>=b[x]){
a[i]-=b[x];//标记
dfs(x+1,y+1);
a[i]+=b[x];//回溯
}
}
int main(){
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
cin>>m;
for(int i=1;i<=m;i++) cin>>b[i];
dfs(1,0);
cout<<ans<<endl;
return 0;
}
这个代码↑↑↑ 无ios...无clock()
谢谢你们看完~~~
我怕被喷