Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- #include <cstring>
- #include <algorithm>
- #include <cmath>
- #include <vector>
- #include <set>
- #include <map>
- #include <stack>
- #include <queue>
- #include <deque>
- #include <unordered_map>
- #include <numeric>
- #include <iomanip>
- #include <regex>
- using namespace std;
- #define pii pair<long long , long long>
- #define FAST ios_base::sync_with_stdio(false); cin.tie(NULL)
- const long long dx[4] = {0, 1, 0, -1}, dy[4] = {1, 0, -1, 0};
- const long long dl[2] = {1, -1};
- const long long MOD = 1e9 + 7;
- const long long MAX = 255;
- long long n, w;
- long long weight[MAX], talent[MAX];
- long long dp[1005];
- bool check(long long cur){
- for(long long i = 0; i <= w; i++){
- dp[i] = -2e9;
- }
- dp[0] = 0;
- for(long long i = 0; i < n; i++){
- long long tmp = 1000 * talent[i] - cur * weight[i];
- for(long long j = w; j >= 0; j--){
- if(dp[j] == -2e9){
- continue;
- }
- if(dp[min(w, j + weight[i])] < dp[j] + tmp){
- dp[min(w, j + weight[i])] = dp[j] + tmp;
- }
- }
- }
- if(dp[w] >= 0){
- return true;
- }
- else{
- return false;
- }
- }
- int main() {
- freopen("talent.in", "r", stdin);
- freopen("talent.out", "w", stdout);
- FAST;
- cin >> n >> w;
- for(long long i = 0; i < n; i++){
- cin >> weight[i] >> talent[i];
- }
- long long lo = 0, hi = 250000001;
- while(lo < hi){
- long long mid = (lo + hi) / 2 + 1;
- if(check(mid)){
- lo = mid;
- }
- else{
- hi = mid - 1;
- }
- }
- cout << lo << "\n";
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement