Hdoj—1789

//大意理解 先排序 最早交的里面选最大值 扫描完了加没写的 排序后 应该是早交的和扣分多的在前 用结构体吧
/*#include<stdio.h>
#include<stdio.h>
int cmp(void const* a,void const*b)
{
if(*(st*)a->t==*(st*)b->t)
return *(st*)b->kou-*(st*)b->kou;
else
return *(st*)a->t-*(st*)b->t;
}
typedef struct
{
int vis;
int t;
int kou;

}st s[10000];
int main()
{
return 0;
}*/ //理解完全错误啊这样选择完全得不到解

题意就是最大的最迟做 做不了就被扣分。。 AC代码如下:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct st
{
    int time;;
    int score;
    
}a[1001];
int cam(const void *x,const void *y)
{
    struct st p = *((struct st *)x);
    struct st q = *((struct st *)y);
    
      return q.score-p.score;

    
}
int main()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        int n, vis[1001];
        
        scanf("%d",&n);
        int i;
        for(i=1;i<=n;i++)
        {
            scanf("%d",&a[i].time);
        }
        for(i=1;i<=n;i++)
        {
            scanf("%d",&a[i].score);
        }
        for(i=1;i<=n;i++)
        //printf("%d %d
",a[i].time,a[i].score);
        qsort(&a[1],n,sizeof(a[1]),cam);
        int count = 0;
        int day=0;
        int j;
        memset(vis,0,sizeof(vis));
        for(i=1;i<=n;i++)
        {
            
            for(j=a[i].time;j>=1;j--)
            {
                
                if(!vis[j])
                {
                    
                    vis[j]=1;
                    break;
                }
            }
            if(j<=0)
            count+=a[i].score; 
        }
        printf("%d
",count);
    
        
    } 
    return 0;
}

感觉和网上搜的如出一辙。。。

#include<stdio.h>
#include<stdlib.h>
typedef struct
{
    //int vis;
    int t;
    int kou;

}st;
st s[10000];
int vis[100000];
int cmp(void const* a,void const*b)
{
    return ((st*)b)->kou-((st*)a)->kou;
}


int main()
{
    int max_t,i,ci,c;
    scanf("%d",&ci);
    while(ci--){
        int sum=0,j;
        scanf("%d",&c);
        max_t=-1;
        for(i=0;i<c;i++)
        {
            scanf("%d",&s[i].t);
            max_t=max_t>s[i].t?max_t:s[i].t;
        }
        for(i=1;i<=max_t;i++)vis[i]=0;
        for(i=0;i<c;i++)
        {
            scanf("%d",&s[i].kou);
        }
        qsort(s,c,sizeof(s[0]),cmp);
        for(i=0;i<c;i++)
        {
            for(j=s[i].t;j>0;j--)
            {
                if(!vis[j])
                {
                    vis[j]=!vis[j];
                    break;
                }
            }
            if(j==0)
            {
                sum+=s[i].kou;
            }
        }
        printf("%d
",sum);
    }
    return 0;
原文地址:https://www.cnblogs.com/Geek-xiyang/p/5078209.html