zoukankan      html  css  js  c++  java
  • HDU1789

    //贪心,对时间按升序排序,如果时间相同则对分数按降序排序
    //按时间顺序来对任务进行标记 能在今天完成则标记1,如果完成不了 则往前面找分数最小
    //的进行交换,小的分数加入无法完成的分数.

    #include<iostream>
    #include<algorithm>
    #include<cstring>
    using namespace std;
    struct homework
    {
        int data;
        int score;
    };
    bool cmp(homework a,homework b)
    {
        if(a.data==b.data)
            return a.score>b.score;//假如天数一样,就比较分数大小,大的放前面
        else
            return a.data<b.data;
    }
    int main()
    {
        int t,i,j,min;
        int flag[1001];
        homework a[1001];
        int n,sum,temp,d;
        while(cin>>t){
        while(t--)
        {
            cin>>n;
            for(i=0;i<n;i++)
                cin>>a[i].data;
            for(i=0;i<n;i++)
                cin>>a[i].score;
            sum=0;
            sort(a,a+n,cmp);//排序
            memset(flag,0,sizeof(flag));
            d=1,temp=0;
            for(i=0;i<n;i++)
            {
                if(a[i].data>=d)//假如该天没作业,把a[i]定在该天完成
                {
                    flag[i]=1;
                    d++;
                }
                else //假如有已经有作业了,则找出分数最小的与之交换
                {
                    min=a[i].score;
                    temp=i;//temp为最小的分数的位置
                    for(j=i-1;j>=0;j--)
                        if(flag[j]==1&&a[j].score<min)
                        {
                           min=a[j].score;
                            temp=j;
    
                        }
                   sum+=a[temp].score;//sum相加
                   a[temp].score=a[i].score;//交换
    
               }
            }
           cout<<sum<<endl;
        }
        }
        return 0;
    }
    
  • 相关阅读:
    12.数组三--数组的冒泡排序与快速排序
    11.数组二
    10.数组一
    Vue之组件与父子传值
    Django模型层
    面向对象的组合用法
    面向对象初识
    Python内置函数
    列表推导式,生成器表达式
    装饰器进阶
  • 原文地址:https://www.cnblogs.com/wzsblogs/p/4326283.html
Copyright © 2011-2022 走看看