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;
}