zoukankan      html  css  js  c++  java
  • Codeforces Round #579 (Div. 3) Complete the Projects(贪心、DP)

     http://codeforces.com/contest/1203/problem/F1

    Examples

    input 1
    3 4
    4 6
    10 -2
    8 -1
    output 1
    YES
    input 2
    3 5
    4 -5
    4 -2
    1 3
    output 2
    YES
    input 3
    4 4
    5 2
    5 -3
    2 1
    4 -2
    output 3
    YES
    input 4
    3 10
    10 0
    10 -10
    30 0
    output 4
    NO

    Note

    In the first example, the possible order is: 1,2,3.

    In the second example, the possible order is: 2,3,1.

    In the third example, the possible order is: 3,1,4,2.

     1 #include <stdio.h>
     2 #include <string.h>
     3 #include <iostream>
     4 #include <string>
     5 #include <math.h>
     6 #include <algorithm>
     7 #include <queue>
     8 #include <set>
     9 #include <math.h>
    10 const int INF=0x3f3f3f3f;
    11 typedef long long LL;
    12 const int mod=1e9+7;
    13 const double PI=acos(-1);
    14 const int maxn=1e5+10;
    15 using namespace std;
    16 
    17 struct node1
    18 {
    19     int a;
    20     int b;
    21 }zheng[105];
    22 
    23 struct node2
    24 {
    25     int a;
    26     int b;
    27 }fu[105];
    28 
    29 int n1,n2;
    30 
    31 bool cmp1(node1 x,node1 y)
    32 {
    33     return x.a<y.a; 
    34 }
    35 
    36 bool cmp2(node2 x,node2 y)
    37 {
    38     if(x.a+x.b!=y.a+y.b)
    39         return x.a+x.b>y.a+y.b;
    40     else
    41         return x.b>y.b;
    42 }
    43 
    44 int main()
    45 {
    46     int n,r;
    47     scanf("%d %d",&n,&r);
    48     for(int i=1;i<=n;i++)
    49     {
    50         int x,y;
    51         scanf("%d %d",&x,&y);
    52         if(y<0)
    53         {
    54             fu[n2].a=x;
    55             fu[n2].b=y;
    56             n2++;
    57         }
    58         else
    59         {
    60             zheng[n1].a=x;
    61             zheng[n1].b=y;
    62             n1++;
    63         }
    64     }
    65     sort(zheng,zheng+n1,cmp1);
    66     for(int i=0;i<n1;i++)
    67     {
    68         if(r<zheng[i].a)
    69         {
    70             printf("NO
    ");
    71             return 0;
    72         }
    73         r+=zheng[i].b;
    74     }
    75     sort(fu,fu+n2,cmp2);
    76     for(int i=0;i<n2;i++)
    77     {
    78         if(r<fu[i].a)
    79         {
    80             printf("NO
    ");
    81             return 0;
    82         }
    83         r+=fu[i].b;
    84     }
    85     if(r<0)
    86         printf("NO
    ");
    87     else
    88         printf("YES
    ");
    89     return 0;
    90 }
     1 #include <iostream>
     2 #include <cstdio>
     3 #include <algorithm>
     4 #include <queue>
     5 using namespace std;
     6 #define endl '
    '
     7  
     8 const int maxn = 100;
     9 int dp[600001];
    10 pair<int, int> a[maxn];
    11 queue<int> q;
    12  
    13 int main(){
    14     ios::sync_with_stdio(false);
    15     cin.tie(NULL);
    16     
    17     int n, r;
    18     cin >> n >> r;
    19     
    20     for(int i = 0; i < n; i++){
    21         cin >> a[i].first >> a[i].second;
    22     } 
    23     
    24     sort(a, a + n);
    25     
    26     int l = 0, sum = r, ans = 0;
    27     for(; l < n && a[l].first <= sum; l++){
    28         if(a[l].second >= 0){
    29             q.push(l);
    30             ans++;
    31         }
    32     }
    33     
    34     while(!q.empty()){
    35         int c = q.front();
    36         q.pop();
    37         
    38         sum += a[c].second;
    39         
    40         for(; l < n && a[l].first <= sum; l++){
    41             if(a[l].second >= 0){
    42                 q.push(l);
    43                 ans++;
    44             }
    45         } 
    46     }
    47     
    48     sort(a, a + l, [&](pair<int, int> f, pair<int, int> g){
    49         return f.first + f.second > g.first + g.second;    
    50     });
    51     dp[0] = ans;
    52     
    53     for(int i = 0; i < l; i++){
    54         if(a[i].second >= 0) continue;
    55         int y = -a[i].second;
    56         
    57         for(int j = sum - max(y, a[i].first); j >= 0; j--){
    58             dp[j + y] = max(dp[j + y], dp[j] + 1);
    59             ans = max(ans, dp[j + y]);
    60         }
    61     }
    62     
    63     cout << (ans == n ? "YES" : "NO") << endl;
    64  
    65     return 0;
    66 }

     http://codeforces.com/contest/1203/problem/F2

    Examples

    input 1
    3 4
    4 6
    10 -2
    8 -1
    output 1
     3
    input 2
    5 20
    45 -6
    34 -15
    10 34
    1 27
    40 -45
    output 2
     5
    input 3
    3 2
    300 -300
    1 299
    1 123
    output 3
     3

    先粘题解,以后再填坑

     1 #include <stdio.h>
     2 #include <string.h>
     3 #include <iostream>
     4 #include <string>
     5 #include <math.h>
     6 #include <algorithm>
     7 #include <queue>
     8 #include<bits/stdc++.h>
     9 using namespace std;
    10  
    11 #define PI acos(-1)
    12 #define hell 1000000007
    13 #define HELL 998244353
    14 #define io ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0)
    15 #define fix(n) cout << fixed << setprecision(n)
    16 #define mset(a,n) memset(a,n,sizeof a)
    17 #define rep(i,a,b) for (__typeof((b)) i=(a);i<(b);i++)
    18 #define repp(i,a,b,p) for(__typeof((b)) i=(a);i<(b);i+=p)
    19 #define ren(i,a,b) for(__typeof((a)) i=(a);i>=(b);i--)
    20 #define renn(i,a,b,p) for(__typeof((a) i=(a);i>=(b);i-=p)
    21 #define ADD(a,b,c) ((a)%c+(b)%c)%c
    22 #define SUB(a,b,c) ((a)%c-(b)%c+c)%c
    23 #define MUL(a,b,c) (((a)%c)*((b)%c))%c
    24 #define lbd lower_bound
    25 #define ubd upper_bound
    26 #define ll long long
    27 #define ld long double
    28 #define pb push_back
    29 #define fi first
    30 #define se second
    31 #define vll vector<ll>
    32 #define pll pair<ll,ll>
    33 #define vpll vector<pll>
    34 #define all(v) (v).begin(), (v).end()
    35 #define sz(x) (ll)x.size()
    36 #define endl "
    "
    37 #define out(n) cout<<n<<" "
    38 #define outl(n) cout<<n<<endl
    39 #define line cout<<endl
    40 #define bug(n) {outl(n);return;}
    41 #define N 105
    42 ll n,r,dp[N][300005];
    43 pll a[N];
    44 bool comp(pll a, pll b){
    45     if(a.se>0&&b.se>0)return a.fi<b.fi;
    46     if(a.se>0||b.se>0)return a.se>0;
    47     return a.fi+a.se>b.fi+b.se;
    48 }
    49 ll fun(ll i, ll r){
    50     if(dp[i][r]!=-1)return dp[i][r];
    51     if(i==n+1)return 0;
    52     ll ans=fun(i+1,r);
    53     if(r>=a[i].fi&&r>=-a[i].se)ans=max(ans,1+fun(i+1,r+a[i].se));
    54     return dp[i][r]=ans;
    55 }
    56 void solve(){
    57     cin>>n>>r;
    58     mset(dp,-1);
    59     rep(i,1,n+1)cin>>a[i].fi>>a[i].se;
    60     sort(a+1,a+n+1,comp);
    61     bug(fun(1,r));
    62 }
    63 void prep(){
    64  
    65 }
    66 int main(){
    67     io;
    68     ll t=1;
    69     // cin>>t;
    70     prep();
    71     fix(12);
    72     while(t--)
    73         solve();
    74     return 0;
    75 }
     1 #include <iostream>
     2 #include <cstdio>
     3 #include <algorithm>
     4 #include <queue>
     5 using namespace std;
     6 #define endl '
    '
     7  
     8 const int maxn = 100;
     9 int dp[600001];
    10 pair<int, int> a[maxn];
    11 queue<int> q;
    12  
    13 int main(){
    14     ios::sync_with_stdio(false);
    15     cin.tie(NULL);
    16     
    17     int n, r;
    18     cin >> n >> r;
    19     
    20     for(int i = 0; i < n; i++){
    21         cin >> a[i].first >> a[i].second;
    22     } 
    23     
    24     sort(a, a + n);
    25     
    26     int l = 0, sum = r, ans = 0;
    27     for(; l < n && a[l].first <= sum; l++){
    28         if(a[l].second >= 0){
    29             q.push(l);
    30             ans++;
    31         }
    32     }
    33     
    34     while(!q.empty()){
    35         int c = q.front();
    36         q.pop();
    37         
    38         sum += a[c].second;
    39         
    40         for(; l < n && a[l].first <= sum; l++){
    41             if(a[l].second >= 0){
    42                 q.push(l);
    43                 ans++;
    44             }
    45         } 
    46     }
    47     
    48     sort(a, a + l, [&](pair<int, int> f, pair<int, int> g){
    49         return f.first + f.second > g.first + g.second;    
    50     });
    51     dp[0] = ans;
    52     
    53     for(int i = 0; i < l; i++){
    54         if(a[i].second >= 0) continue;
    55         int y = -a[i].second;
    56         
    57         for(int j = sum - max(y, a[i].first); j >= 0; j--){
    58             dp[j + y] = max(dp[j + y], dp[j] + 1);
    59             ans = max(ans, dp[j + y]);
    60         }
    61     }
    62     
    63     cout << ans << endl;
    64  
    65     return 0;
    66 }
     
     
     
     
  • 相关阅读:
    安装lnmp 时如何修改数据库数据存储地址及默认访问地址
    ubuntu 设置root用户密码并实现root用户登录
    解决ubuntu 远程连接问题
    linux 搭建FTP服务器
    PHP 根据ip获取对应的实际地址
    如何发布自己的composer包
    使用composer安装composer包报Your requirements could not be resolved to an installable set of packages
    laravel 框架配置404等异常页面
    使用Xshell登录linux服务器报WARNING! The remote SSH server rejected X11 forwarding request
    IoTSharp 已支持国产松果时序数据库PinusDB
  • 原文地址:https://www.cnblogs.com/jiamian/p/11349587.html
Copyright © 2011-2022 走看看