P1104 采药
#include <iostream>
#include <cstring>
using namespace std;
int dp[101][1001];
int c[1000],t[1000];
int max1=0,m,time1;
void search(int n,int wn,int tn)
{
if(dp[n][tn]>=wn)return ;
dp[n][tn]=wn;
if(n>=m){if(wn>max1){max1=wn;}return ;}
if(time1>=tn+t[n])search(n+1,wn+c[n],tn+t[n]);
search(n+1,wn,tn);
return ;
}
int main()
{
memset(dp,-1,sizeof(dp));
int i;
cin>>time1>>m;
for(i=0;i<m;i++)cin>>t[i]>>c[i];
search(0,0,0);
cout<<max1;
return 0;
}
#include <iostream>
#include <cstring>
using namespace std;
int dp[101][1001];
int c[1000],t[1000];
int max1=0,m,time1;
void search(int n,int wn,int tn)
{
if(dp[n][tn]>=wn)return ;
dp[n][tn]=wn;
if(n>=m){if(wn>max1){max1=wn;}return ;}
if(time1>=tn+t[n])search(n+1,wn+c[n],tn+t[n]);
search(n+1,wn,tn);
return ;
}
int main()
{
memset(dp,-1,sizeof(dp));
int i;
cin>>time1>>m;
for(i=0;i<m;i++)cin>>t[i]>>c[i];
search(0,0,0);
cout<<max1;
return 0;
}