zoukankan      html  css  js  c++  java
  • [AGC027A]Candy Distribution Again

    Description

    AGC027A
    你有一些糖果,你要把这些糖果一个不剩分给一些熊孩子,但是这帮熊孩子只要特定数目的糖果,否则就会不开心,求最多的开心人数。

    Solution

    如果(sum a_i = x)的话,答案就是(N),否则答案一定小于(N)。对于一个熊孩子们的真子集(S),如果(sum_{a_iin S} a_i le x),那么一定可以满足这些孩子,然后把剩下的糖果任意分配到剩下的孩子手中即可。这样我们只需要找到最大的(S),排序后贪心即可。但是不要忘了如果(|S| = N),要输出(N-1)

    Code

    #include <cstdio>
    #include <algorithm>
     
    const int N = 110;
     
    int a[N], n, m;
     
    int main() {
    	scanf("%d%d", &n, &m);
    	for (int i = 1; i <= n; ++i) scanf("%d", &a[i]);
    	std::sort(a+1, a+n+1);
    	int ans = 0;
    	for (int i = 1; i <= n; ++i) {
    		if (m >= a[i]) {
    			m -= a[i];
    			ans++;
    		} else {
    			break;
    		}
    	}
    	if (m != 0 && ans == n) ans--; // 这里我一开始写的是 if (m != 0 && ans > 0) ans--;
    	printf("%d
    ", ans);
    }
    

    Note

    这个题我竟然做了两个小时才做出来,一开始想的是各种奇怪的贪心或者是DP等乱七八糟的算法,实际上只是没有想出来如果有糖剩下,并不一定答案就是错的。看来还是要多刷一些思维题,不要老是看题解和打板子。

  • 相关阅读:
    关于 TIdHttp
    DCEF3 相关资料
    WPF RichTextBox 控件常用方法和属性
    Delphi Data Type to C# Data Type
    获取 CPU 序列号
    Visual Studio 调用 Delphi DLL 会退出的解决方案
    IDHttp的基本用法(转)
    TChromeTabs 优化改进
    java与json转换
    js charAt()方法
  • 原文地址:https://www.cnblogs.com/wyxwyx/p/agc027a.html
Copyright © 2011-2022 走看看