zoukankan      html  css  js  c++  java
  • 【题解】「SP34013」SEUG

    这道题一看就是 贪心

    使放的石头少,就需要石头大。

    那么就可以将石头重量排序,从大到小。

    这道题里面看似东西很多,但是很多东西都是没有用的。比如说:箱子的长和宽,因为题目中说「每加一个石头,水的高度就会增加那个石头的重量那么多。」,根本没有用到长和宽,只需要高度。

    其次,添加的石头的总重量要 大于 (不是大于等于)长方体剩下的高度。所以只需要循环每次添加最重的石头,当:剩下的高度大于石头总重量时,停止循环,输出石头数量。

    详细的,看代码:

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<cstring>
    #include<cmath>
    #define line cout << endl
    using namespace std;
    int t;
    bool cmp(int x, int y) {
    	return x > y;
    }
    int main() {
    	cin >> t;
    	for (int T = 1; T <= t; T++) {//T组数据
    		int a, b, c, d;//分别表示:箱子的长宽高和箱子里有多高的水
    		cin >> a >> b >> c >> d;
    		int n;
    		cin >> n;
    		int w[n + 5];
    		for (int i = 1; i <= n; i++) {
    			cin >> w[i];
    		}
    		sort(w + 1, w + n + 1, cmp);//把石头的重量从大到小排序
    		int ans = 0, cnt = 0;//分别表示:用了的石头的数量,和
    		while (c - d >= cnt) {//当剩下的高度还小于等于石头的总重量时,进入循环
    			ans++;//用了的石头的数量加一
    			cnt += w[ans];//其实这里的ans就是代表用到了第几块石头,不用再建变量,浪费空间(其实是懒得再建变量了(((
    		}
    		cout << ans;//输出答案
    		line;//换行!!!
            //换行!!!
            //换行!!!
            //重要的事情说三遍(
    	}
    	return 0;
    }
    

    不要抄哦QAQ,最重要的是自己理解,自己思考。QAQ

  • 相关阅读:
    Direct hosting of SMB over TCP/IP
    学习 Linux,302(混合环境): 概念
    脚本
    linux加入windows域
    Internet传输协议-TCP
    vCenter Single Sign On 5.1 best practices
    Zoning and LUN Masking
    Fiber Channel SAN Storage
    How to check WWN and Multipathing on Windows Server
    在Windows中监视IO性能
  • 原文地址:https://www.cnblogs.com/-TNT-/p/solution-sp34013.html
Copyright © 2011-2022 走看看