当前位置:编程学习 > C/C++ >>

UVa 624: CD

这道题由于每组数据最多只有20个,其可能组成的时间总长度最多有2^20大约10^6中,一个数组可以放下,我使用了vector。
 
选出vector中存有的总时间长度的最大者(且不超过N),根据其序号计算出该最大时间总长度包含了哪些数据即可。
 
我的解题代码如下:
 
#include <iostream>  
#include <cstdio>  
#include <cstring>  
#include <cstdlib>  
#include <vector>  
#include <algorithm>  
using namespace std;  
  
#define maxm 20  
int Duration[maxm];  
  
int main()  
{  
    int N,M;  
    int Size,Max,Maxk;  
    int tmp;  
    vector<int> v;  
    while(cin >> N >> M)  
    {  
        for(int i=0; i<M; i++) cin >> Duration[i];  
        Max = 0;  
        v.clear(); v.push_back(0);  
  
        for(int i=0; i<M; i++)  
        {  
            Size = v.size();  
            for(int j=0; j<Size; j++)  
            {  
                v.push_back( tmp = v[j]+Duration[i]);  
                if(tmp<=N && Max<tmp)  
                {  
                    Max = tmp;  
                    Maxk = v.size()-1;  
                }  
            }  
        }  
  
        int div = 2;  
        for(int i=0; i<M; i++)  
        {  
            if(Maxk%div >= div/2) cout << Duration[i] << ' ';  
            div *= 2;  
        }  
        cout << "sum:" << Max << endl;  
    }  
      
    return 0;  
}  

 


补充:软件开发 , C++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,