zoukankan      html  css  js  c++  java
  • 【hdoj_2111】SavingHDU

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=2111


    题目理解:给出一个口袋的容量,若干种宝物的单价和体积,单个的宝物可以分割,待求的是最多能装价值多少的宝物.


    思路:宝物可以分割,所以如果宝物足够多的话,口袋可以装满.因此,先对所有宝物按照价格递减排序,然后从高价的宝物开始,把它们放进口袋,直到宝物装完了或者口袋装满了为止.

    装的过程中会遇到两种情况:

    1.某种宝物的体积小于口袋的体积,则将这种宝物全部装进口袋,更新口袋的剩余容积.

    2.某种宝物的体积大于口袋的体积,则将这种宝物的一部分装进口袋是口袋装满.

    C++代码如下

    #include<iostream>
    #include<algorithm>
    using namespace std;
    
    struct Treasure//将宝物看多 结构体 
    {
    	int price;
    	int volume;
    };
    
    bool cmp(Treasure t1,Treasure t2)
    {
    	return t1.price > t2.price;//用于将宝物按照价格递减顺序排序 
    }
    
    int main()
    {
    	int V,n;
    	while(cin>>V)
    	{
    		if(V==0) break;
    		cin >> n;
    		Treasure *T = new Treasure[n];
    		for(int i=0;i<n;i++)
    			cin >> T[i].price >> T[i].volume;
    		sort(T,T+n,cmp);//排序 
    		int result = 0;
    		for(int i=0;i<n;i++)
    		{
    			if(V==0)	break;//口袋满了,退出 
    			if(V>T[i].volume)
    			{
    				result += T[i].price * T[i].volume;	
    				V = V - T[i].volume;//更新口袋数据 
    			}
    			else
    			{
    				result += T[i].price * V;
    				V = 0;//更新口袋数据 
    			}
    		}
    		cout << result << endl;
    	} 
    	
    	return 0;
    }
    注意:上述代码提交会出现错误提示,删掉所有的注释再提交,可以通过.

  • 相关阅读:
    ◆ C++中通过溢出覆盖虚函数指针列表执行代码
    关于在OnTimer中连续弹出对话框的讨论
    SetTimer
    Windows内核对象
    日志收缩
    暴力求值
    低级问题
    函数限制
    字符串找字段和表
    android错误提示说明汇总
  • 原文地址:https://www.cnblogs.com/tensory/p/6590766.html
Copyright © 2011-2022 走看看