1 #include<iostream>
2 #include<cstdio>
3 #include<algorithm>
4 #include<cstring>
5 using namespace std;
6 const int MAX = 0x3fffffff;
7 const int N = 1e4+10;
8 struct T
9 {
10 int wi,vi;
11 }ma[110];
12 long long dp[N];
13 int main()
14 {
15 int n , W, M;
16 while(scanf("%d %d",&n,&W) !=EOF)
17 {
18 M = 0;
19 fill(dp,dp+N,MAX);
20 for(int i = 1;i<=n ; i++)
21 {
22 scanf("%d%d",&ma[i].wi,&ma[i].vi);
23 M = ma[i].vi + M;
24 }
25 dp[0] = 0;
26 //常用的01背包
27 for(int i = 1; i<=n; i++)
28 for(int j = M; j>=ma[i].vi; j--)
29 {
30 dp[j] = min(dp[j],dp[j-ma[i].vi]+ma[i].wi);
31 }
32 int ans = 0;
33 for(int i = M; i>=0; i--)
34 {
35 if(dp[i]<=W) {ans = i;break;}//从最大的价值开始遍历,最大价值不会超过1w
36 }
37 printf("%d
",ans);
38 }
39 return 0;
40 }