http://acm.hdu.edu.cn/showproblem.php?pid=4508
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#include<iostream>
#include<algorithm>
using namespace std;
const int sizen=100100;
int a[sizen];
int b[sizen];
__int64 dp[sizen];
int main()
{
int n;
int i,j;
int sum;
while(scanf("%d",&n)!=EOF)
{
for(i=1;i<=n;i++)
scanf("%d%d",&a[i],&b[i]);
scanf("%d",&sum);
memset(dp,0,sizeof(dp));
for(i=1;i<=n;i++)
for(j=b[i];j<=sum;j++)
dp[j]=max(dp[j],dp[j-b[i]]+a[i]);
printf("%I64d\n",dp[sum]);
}
return 0;
}