11003

#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>

using namespace std;

int n;
int dp[1002][3002];
int capacity[1002];
int weight[1002];

void init()
{
	for(int i=0;i<1002;i++)
		for(int j=0;j<3002;j++)
			dp[i][j]=0;
}

int _max(int a,int b)
{
	return a>b?a:b;
}
int _min(int a,int b)
{
	return a<b?a:b;
}
int main()
{
	int idx;
	while(scanf("%d",&n),n)
	{
		init();
		for(int i=1;i<=n;i++)
		{
			scanf("%d%d",&weight[i],&capacity[i]);
			dp[i][capacity[i]]=1;
		}
		for(int i=2;i<=n;i++)
		{
			for(int j=0;j<3002;j++)
			{
				if(j>=weight[i])
				{
					idx = _min(j-weight[i],capacity[i]);
					dp[i][idx]=_max(dp[i][idx],dp[i-1][j]+1);
				}
				dp[i][j]=_max(dp[i][j],dp[i-1][j]);
			}
		}
		int height=0;;
		for(int i=0;i<3002;i++)
		{
			height=_max(height,dp[n][i]);
		}
		cout<<height<<"\n";
	}
	return 0;
}

 

Leave a Reply

Your email address will not be published. Required fields are marked *