zoukankan      html  css  js  c++  java
  • [NOI.AC] candy

    题意:求净利益。
    思路:
    其实我也不怎么懂题面。
    不过这种题一般来说就是从最大的开始选。
    所以考虑贪心。
    那么代价如何处理呢??
    我们考虑两个序列同时选数,把代价每次记录到一个序列的和上,那么对于两次的净利益求最大即可。

    #include <bits/stdc++.h>
    using namespace std;
    #define ll long long
    #define int long long
    const int maxn = 100010;
    int a[maxn];
    int b[maxn];
    inline int solve(int *a,int *b,int n,int W) {
    	int sum_a = 0;
    	int sum_b = 0;
    	int ans = -999;
    	for(int i = 1,tmp = 0;i <= n; ++i) {
    		sum_a += a[i];
    		while(tmp <= n && sum_b < sum_a) {
    			sum_b += b[++tmp];
    		}
    		if(sum_a <= sum_b) {
    			ans = max((ll)ans,sum_a - (ll)W * (i + tmp));
    		}
    	}
    	return ans;
    }
    inline bool cmp(int a,int b) {
    	return a > b;
    }
    int n,W;
    signed main () {
    	cin >> n >> W;
    	for(int i = 1;i <= n; ++i) {
    		cin >> a[i];
    	}
    	for(int i = 1;i <= n; ++i) {
    		cin >> b[i];
    	}
    	sort(a + 1,a + n + 1,cmp);sort(b + 1,b + n + 1,cmp);
    	int ans1 = solve(a,b,n,W);
    	int ans2 = solve(b,a,n,W);
    	printf("%lld\n",max(ans1,ans2));
    	return 0;
    }
    
  • 相关阅读:
    AS中Loading 的加载
    视频类的相关加载
    2012、10、05 听课笔记
    2012、09、27 听课笔记
    小程序的编写—2
    小程序的编写—1
    2012、9、28 听课笔记
    GCD
    CFHTTP
    获取当前时间字符串
  • 原文地址:https://www.cnblogs.com/akoasm/p/9635328.html
Copyright © 2011-2022 走看看