zoukankan      html  css  js  c++  java
  • Codeforces Round #608 (Div. 2)

    传送门


    A Suits standard input/output 1 s, 256 MB Submit Add to favourites x7772

      如题意,模拟
    B Blocks standard input/output 2 s, 256 MB Submit Add to favourites x5220

      给你一个 n 长度的 BW 字符串, 问是否能在 3n 次翻转内将字符串变成全 B 或者 全 W, (翻转的话是 相邻的两个字符都翻一下 B-W 或者 W-B), 做法是以白色为标准 从前到后跑一遍   如果是黑色字符就翻转下这个字符和后面的字符, 跑完一遍后 如果还没有变成全白 , 那就再以黑色为标准跑一遍  如果还不能变成全B 或 W 串  那便无解。
    C Shawarma Tent standard input/output 1 s, 256 MB Submit Add to favourites x5079

      给你一个学校的地址x0 y0, 还有 n 个学生的家庭地址,  问将一个帐篷建在哪里  能够有最多学生经过(学生到学校只能走最短的dx+dy), 当时写的时候画了个图 以学校地址为中心,猜了一波  发现可以分别用 x=x0 和 y= y0 将平面划分成两个区域, 如果在哪个区域的学生坐标点最多 那帐篷就得建在这条路上为最优  至于帐篷坐标点就为学校地址往那个区域-1即可。enmmm 过了, 结束以后 看题解 大致如此。
    D Portals standard input/output 2 s, 256 MB Submit Add to favourites x978

      enmmmmm题意confused, 结束以后看了题解 再看了一遍题目 大概懂了, 给你 n 个城堡 必须按顺序攻陷, 每个城堡有攻陷需要的最少士兵数量要求 和 攻下来以后能够增加的士兵数量 还有占领这座城堡能得到的收益, 有 m 个portal u-> v  在城堡 u 通过portal可以派兵去城堡v ,  至于占领城堡只需要一个士兵即可, portal只有在当前城堡u时才可以用, 也就是说每个城堡需要进行一次决策, 求最大的收益, 然后题解用的是二维dp  dp[i][j] 表示身处 i 城堡且有 j 个士兵, 转移方程为 

      if(dp[i][j] >= 0)  dp[i+1][j+b[i]] = max(dp[i][j], dp[i+1][j+b[i]]);

      如果 i 能派兵到 j    dp[i+1][k-1] = max(dp[i+1][k]+c[j], dp[i+1][k-1]); 

      至于poral 初始化所有城堡为i 表示都能驻兵自己,只需要记录最大的编号能到 i 的城堡,
      最后求下最大的 dp[n][i] 即可, 代码如下


    E Common Number standard input/output 2 s, 256 MB Submit Add to favourites x1312
    F Divide The Students standard input/output 8 s, 512 MB Submit Add to favourites x56

    #include<bits/stdc++.h>//Codeforces Round #608 (Div. 2)
    using namespace std;
    
    #define _for(i,a,b) for(int i = (a); i < (b); i++)
    #define _rep(i,a,b) for(int i = (a); i <= (b); i++)
    #define _per(i,a,b) for(int i = (a); i > (b); i--)
    #define ll long long
    void taskA(){
        int t; 
        t = 1;
        while(t--) {
            int a,b,c,d,e,f, ans = 0;
            cin >> a >> b >> c >> d >> e >> f;
            if(e < f) {
                int x = min(b, min(c, d));
                b -= x, c -= x, d-=x;
                ans += f*x;
                x = min(a, d); if(x < 0) x = 0;
                ans += e*x;
            }else {
                int x = min(a, d);
                a -= x, d-=x;
                ans += e*x;
                x = min(b, min(c, d)); 
                b -= x, c -= x, d-=x; if(x < 0) x = 0;
                ans += f*x;
            }
            cout << ans  << '
    ';
        }return;
    }
    void taskB(){
        int n; cin >> n;
        string s; cin >> s;
        int w = 0, b = 0;
        vector<int> v(n);
        for(auto &c : s) {
            if(c == 'W') w++, c = 0;
            else b++, c = 1; 
        }
        if(!w || !b) cout << "0
    ";
        else if(n%2==0 && b%2==1) cout << "-1
    ";
        else{
            vector<int> ans;
            _for(x,0,2) {
                _for(i,0,n) {
                    if(s[i]==x || i==n-1) continue;
                    ans.push_back(i);
                    s[i] ^= 1, s[i+1]^=1;
                }
                if(x == s[n-1]) {
                        cout << ans.size() << '
    ';
                        //sort(v.begin(), v.end());
                        for(int x1 : ans) cout << x1+1 << " ";
                        cout << '
    ';
                        return;
                }
            } 
        }return;
    }
    void taskC(){
        int n; cin >> n; int x0,y0; cin>> x0 >> y0;
        vector<int> x(n), y(n);
        int x1 = 0, x2 = 0, y1 = 0,y2 = 0;
        _for(i,0,n) {
            cin >> x[i] >> y[i];
            if(x[i] > x0) x1++;
            else if(x[i] < x0) x2++;
            if(y[i] > y0) y1++;
            else if(y[i] <  y0) y2++;
        }
        int ma = max(x1, max(x2, max(y1, y2)));
        if(ma == x1) cout << x1 << '
    ' << x0+1 << ' ' << y0;
        else if(ma == x2) cout << x2 << '
    ' << x0-1 << ' ' << y0;
        else if(ma == y2) cout << y2 << '
    ' << x0 << ' ' << y0-1;
        else if(ma == y1) cout << y1 << '
    ' << x0 << ' ' << y0+1;
        return;
    }
    void taskC1(){
        int n; cin >> n; int x0,y0; cin >> x0 >> y0;
        int dx[] = {0,0,-1,1}, dy[] = {-1,1,0,0}, d[5] = {};
        _for(i,0,n) {
            int x,y; cin >> x >> y;
            _for(j,0,4) {
                int x1 = x0+dx[j], y1 = y0+dy[j];
                if(abs(x-x1)+abs(y-y1)+abs(x1-x0)+abs(y1-y0) == abs(x-x0)+abs(y-y0)) d[j]++;
            }
        }
        int gol = 0;
        _for(i,1,4) if(d[i] > d[gol]) gol = i;
    
        cout << d[gol] << '
    ';
        cout << x0+dx[gol] << " " << y0+dy[gol] << '
    ';
        return;
    }
    int dp[5005][5005];
    void taskD(){
        int n,m,K;
        cin >> n >> m >> K;
        vector<int> a(n), b(n), c(n);
        ll sum = 0;
    
        vector<int> latest(n);
        _for(i,0,n) cin >> a[i] >> b[i] >> c[i], latest[i] = i;
        
        _for(i,0,m) {
            int x,y; cin >> x >> y;
            x--, y--; latest[y] = max(latest[y], x);
        }
        _for(i,0,5005) _for(j,0,5005) dp[i][j] = -1e9;
    
        dp[0][K] = 0;
        _for(i,0,n) {
            _for(j,a[i],5005) {
                if(dp[i][j] >= 0) 
                    dp[i+1][j+b[i]] = max(dp[i][j], dp[i+1][j+b[i]]);
            }
    
            _rep(j,0,i) {
                if(latest[j] == i)
                    _for(k,1,5005) if(dp[i+1][k] >= 0)
                        dp[i+1][k-1] = max(dp[i+1][k]+c[j], dp[i+1][k-1]);
            }
        }
    
        int ans = -1;
        _for(i,0,5005) ans = max(ans, dp[n][i]);
        cout << ans << '
    ';
        return;
    }
    int main(){
        ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
        //freopen("output.txt", "w", stdout);
        //taskA();
        //taskB();
        //taskC();
        taskD();
        return 0;
    }

     

     

  • 相关阅读:
    haproxy 2.5 发布
    cube.js sql 支持简单说明
    基于graalvm 开发一个cube.js jdbc driver 的思路
    apache kyuubi Frontend 支持mysql 协议
    oceanbase 资源池删除说明
    基于obd 的oceanbase 扩容说明
    jfilter一个方便的spring rest 响应过滤扩展
    cube.js schema 定义多datasource 说明
    typescript 编写自定义定义文件
    meow 辅助开发cli 应用的工具
  • 原文地址:https://www.cnblogs.com/163467wyj/p/12124967.html
Copyright © 2011-2022 走看看