尽管说这是站长大人出的题,但确实很简单。->_->
这就是一个二维背包费用问题,用dp[i][j]表示当钱为i,时间为j时能最大满足愿望数量;
那么状态转移方程为:dp[j][k]=max(dp[j][k],dp[j-mon[i]][k-tim[i]]+1);
CODE
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
const int N=205;
int dp[N][N],n,m,summ,sumt,mon[N],tim[N];
int main()
{
scanf("%d%d%d",&n,&summ,&sumt);
for(int i=1;i<=n;i++)
{
scanf("%d%d",&mon[i],&tim[i]);
}
for(int i=1;i<=n;i++)
for(int j=summ;j>=mon[i];j--)
for(int k=sumt;k>=tim[i];k--)
{
dp[j][k]=max(dp[j][k],dp[j-mon[i]][k-tim[i]]+1);//状态转移方程
}
printf("%d",dp[summ][sumt]);
}