奇葩方法,DFS深搜,2AC,1WA,一堆TLE
查看原帖
奇葩方法,DFS深搜,2AC,1WA,一堆TLE
381681
Hz138588楼主2021/1/3 13:58

dp不熟练,只好用dfs。

然而本萌新连dfs也不熟练,于是就有了AAWTTTTTTT的20分。

很久以前用贪心做过,才10分。 求dalao帮助,能改哪个是哪个吧。

贪心代码:

#include<bits/stdc++.h>
using namespace std;
struct yao{
	int t,m;
};
int main(void){
	int T,M,ans=0;
	scanf("%d %d",&T,&M);
	yao yyao[M];
	for(int i=0;i<M;i++){
		cin>>yyao[i].t>>yyao[i].m;
	}
	for(int i=0;i<M;i++){
		for(int j=i+1;j<M;j++){
			if(yyao[j].m>yyao[i].m){
				swap(yyao[j].t,yyao[i].t);
				swap(yyao[j].m,yyao[i].m);
			}
			if(yyao[j].m==yyao[i].m&&yyao[j].t<yyao[i].t){
				swap(yyao[j].t,yyao[i].t);
				swap(yyao[j].m,yyao[i].m);
			}
		}
	}
	for(int i=0;i<M;i++){
		if(yyao[i].t<=T) T-=yyao[i].t,ans+=yyao[i].m;
	}
	printf("%d",ans);
	return 0;

深搜代码:

#include<iostream>
#include<cstdio>
using namespace std;
int T,M,t[101],m[101],ans=-1;
void Dfs(int x,int time,int curr){
	for(x;x<M;x++){
		int n=time,c=curr;
		n-=t[x];
		if(n<0){
			if(c>ans) ans=c;
		}
		if(n==0){
			c+=m[x];
			if(c>ans) ans=c;
		}
		if(n>0){
			c+=m[x];
			Dfs(x+1,n,c);
		}
	}
}
int main(void){
	scanf("%d %d",&T,&M);
	for(int i=0;i<M;i++){
		cin>>t[i]>>m[i];
	}
	Dfs(0,T,0);
	printf("%d",ans);
	return 0;
}
2021/1/3 13:58
加载中...