贪心合集

Problem - 2037 (hdu.edu.cn)

复制代码
#include<iostream>/*活动安排的贪心问题*/
#include<algorithm>
using namespace std;
const int N=110;
int n;
struct node{
    int begin,end;
};
bool cmp(node aa,node bb){
    return aa.end<bb.end;
}
signed main(){
    ios::sync_with_stdio(false);
    cin.tie(0);cout.tie(0);
    while(cin>>n){
        if(!n) return 0;
        node a[N];
        for(int i=0;i<n;i++) cin>>a[i].begin>>a[i].end;
        sort(a,a+n,cmp);
        int count=0,lastend=-1;
        for(int i=0;i<n;i++){
            if(a[i].begin>=lastend){
                count++;
                lastend=a[i].end;
            }
        }        
        cout<<count<<endl;
    }
    return 0;
}
复制代码

 

Problem - 2570 (hdu.edu.cn)

复制代码
#include<iostream>
#include<algorithm>
#include<iomanip>
#include<cstring>
using namespace std;
const int N = 110;
int c,t[N];
signed main(){
    ios::sync_with_stdio(false);
    cin.tie(0);cout.tie(0);
    cin>>c;
    int n,v,w,tmp;//个数 体积 浓度 合法个数 
    double sum;
    while(c--){
        memset(t,0,sizeof(t));
        sum=0.0,tmp=0;
        cin>>n>>v>>w;
        for(int i=1;i<=n;i++) cin>>t[i];
        sort(t+1,t+1+n);
        for(int i=1;i<=n;i++){
            if(((sum+t[i])/(tmp+1))*1.0<=w*1.0){
                sum+=t[i];
                tmp++;
            }else break;
        }
        if(!sum){
            cout<<"0 0.00"<<endl;
        }else cout<<tmp*v<<" "<<fixed<<setprecision(2)<<sum/tmp*0.01<<endl;
    }
    return 0;
}
复制代码

 

1521 -- Entropy (poj.org)

复制代码
#include<iostream>//哈夫曼树编码 
#include<algorithm>
#include<queue>
#include<iomanip>
using namespace std;
string s;
priority_queue<int,vector<int>,greater<int> > q;
signed main(){
    ios::sync_with_stdio(false);
    cin.tie(0);cout.tie(0);
    while(getline(cin,s) && s!="END"){
        int t=1;
        sort(s.begin(),s.end());
        for(int i=1;i<s.length();i++){
            if(s[i]!=s[i-1]){
                q.push(t);
                t=1;
            }else t++;
        }
        q.push(t);
        int ans=0;
        if(q.size()==1) ans=q.top();
        while(q.size()>1){
            int a=q.top();q.pop();
            int b=q.top();q.pop();
            q.push(a+b);
            ans += a+b;
        }
        q.pop();
        cout<<s.length()*8<<" "<<ans<<" "<<fixed<<setprecision(1)<<s.length()*8*1.0/ans*1.0<<endl;
    }
    return 0;
}
复制代码

 

posted @   ACCbulb  阅读(9)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
点击右上角即可分享
微信分享提示