Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #pragma GCC optimize("Ofast")
- #pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,avx2,fma")
- #pragma GCC optimize("unroll-loops")
- #include <bits/stdc++.h>
- #include <complex>
- #include <queue>
- #include <set>
- #include <unordered_set>
- #include <list>
- #include <chrono>
- #include <random>
- #include <iostream>
- #include <algorithm>
- #include <cmath>
- #include <string>
- #include <vector>
- #include <map>
- #include <unordered_map>
- #include <stack>
- #include <iomanip>
- #include <fstream>
- using namespace std;
- typedef long long ll;
- typedef long double ld;
- typedef pair<int,int> p32;
- typedef pair<ll,ll> p64;
- typedef pair<double,double> pdd;
- typedef vector<ll> v64;
- typedef vector<int> v32;
- typedef vector<vector<int> > vv32;
- typedef vector<vector<ll> > vv64;
- typedef vector<vector<p64> > vvp64;
- typedef vector<p64> vp64;
- typedef vector<p32> vp32;
- ll MOD = 998244353;
- double eps = 1e-12;
- #define forn(i,e) for(ll i = 0; i < e; i++)
- #define forsn(i,s,e) for(ll i = s; i < e; i++)
- #define rforn(i,s) for(ll i = s; i >= 0; i--)
- #define rforsn(i,s,e) for(ll i = s; i >= e; i--)
- #define ln "\n"
- #define dbg(x) cout<<#x<<" = "<<x<<ln
- #define mp make_pair
- #define pb push_back
- #define fi first
- #define se second
- #define INF 2e9
- #define fast_cin() ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL)
- #define all(x) (x).begin(), (x).end()
- #define sz(x) ((ll)(x).size())
- #define MaxVal 1000*100+1
- int dp[1001][MaxVal+1] = {0};
- int solve(vector<int> wt, vector<int> v, int n, int W){
- memset(dp,0,sizeof(dp));
- for(int i=0; i<=MaxVal;i++){
- dp[1][i] = INF;
- }
- dp[1][0] = 0;
- dp[1][v[1]] = wt[1];
- for(int i=2; i<=n;i++){
- for(int val =0 ;val<=MaxVal;val++ ){
- dp[i][val] = dp[i-1][val];
- if(v[i]>val){
- continue;
- }
- dp[i][val] = min(wt[i] + dp[i-1][val-v[i]], dp[i][val]);
- }
- }
- int ans = 0;
- for(int i=0; i<=MaxVal;i++){
- //cout<<dp[n-1][i]<<endl;
- if(dp[n][i]<=W)
- ans = i;
- }
- return ans;
- }
- int main()
- {
- fast_cin();
- int n,w;
- cin>>n>>w;
- vector<int> wt(n+1), v(n+1);
- for(int i=1; i<=n;i++){
- cin>>wt[i]>>v[i];
- }
- cout<<solve(wt,v,n,w)<<endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement