NOIP2005普及T3 采药
#include<bits/stdc++.h>
using namespace std;
struct data{
int time,val;
}a[101];
int T,m,ma,h[102],hi[102];
bool cmp(data x,data y) {
return x.val*1.0/x.time > y.val*1.0/y.time;
}
inline void dfs(int t,int v,int id){
if(id>m)return;
if(t+h[id]<=ma)return;
if(t+hi[id]>T){
if(v>ma)ma=v;
return;
}
dfs(t+a[id].time,v+a[id].val,id+1);
dfs(t,v,id);
}
int main(){
scanf("%d%d",&T,&m);
for(int i=1;i<=m;i++)
scanf("%d%d",&a[i].time,&a[i].val);
sort(a+1,a+m+1,cmp);
hi[m+1]=1e9;
for(int i=m;i>=1;i--){
h[i]=h[i+1]+a[i].val;
hi[i]=min(hi[i+1],a[i].time);
}
dfs(0,0,1);
printf("%d",ma);
}
解释一下我的代码为什么会RE,如果你有时间的话告诉我DP版本怎么写。