ACM-HDU1789 Doing Homework again(又是贪心- -、)

D - Doing Homework again

Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u

Submit Status

Description

Ignatius has just come back school from the 30th ACM/ICPC. Now he has a lot of homework to do. Every teacher gives him a deadline of handing in the homework. If Ignatius hands in the homework after the deadline, the teacher will reduce
his score of the final test. And now we assume that doing everyone homework always takes one day. So Ignatius wants you to help him to arrange the order of doing homework to minimize the reduced score.

Input

The input contains several test cases. The first line of the input is a single integer T that is the number of test cases. T test cases follow.

Each test case start with a positive integer N(1<=N<=1000) which indicate the number of homework.. Then 2 lines follow. The first line contains N integers that indicate the deadlines of the subjects, and the next line contains N integers that indicate the reduced
scores.

Output

For each test case, you should output the smallest total reduced score, one line per test case.

Sample Input

 3
3
3 3 3
10 5 1
3
1 3 1
6 2 3
7
1 4 6 4 2 4 3
3 2 1 7 6 5 4 

Sample Output

 0
3

5
#include<stdio.h>
#include<algorithm>
#include<string.h>
using namespace std;
struct e
{
    int day;
    int score;
}a[1005];
int cmp(e a,e b)
{
    if(a.score==b.score) return a.day<b.day;
    else return a.score>b.score;
}
int main()
{
    int i,q,w,j,n,p,u,o;
    scanf("%d",&n);
    while(n--)
    {
    int q,b[1005];
    memset(b,0,sizeof(b));
    scanf("%d",&q);j=0;
    for(i=0;i<q;i++) scanf("%d",&a[i].day);
    for(i=0;i<q;i++) {scanf("%d",&a[i].score);j+=a[i].score;}
    sort(a,a+q,cmp);
    i=0;w=0;
for(i=0;i<q;i++)
    {   o=a[i].day;
        if(b[o]==0)
    b[o]=a[i].score;
     else for(u=o;u>0;u--) if(b[u]==0)
        {b[u]=a[i].score;break;} else ;
    }
    for(i=1;i<=1000;i++) w+=b[i];
    printf("%d\n",j-w);
    }return 0;
}

第一次用天数排序,到第三个测试数据就有问题,用分数排序还是有问题,那么到底用啥!?
好吧,最后是用分数排序,策略比排序重要,其实策略是变相的排序,按照题意,保留分数最大的天数,当分数依旧很大的天数和它重复,就往前排一天。比如第四天有7分和6分,就把7分放在第四天,6分放在第三天,第三天如果也有了就重复。做到最后都对了,却又WA无数次- -、只能说数据太狠了,我需要让b来记录第几天是多少分,但是如果天数太大,那么我需要找到的就多了,最后一个for循环于是到了1000.也算AC了。
时间: 2024-11-02 09:57:19

ACM-HDU1789 Doing Homework again(又是贪心- -、)的相关文章

HDU1789 Doing Homework again 【贪心】

Doing Homework again Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 6878    Accepted Submission(s): 4096 Problem Description Ignatius has just come back school from the 30th ACM/ICPC. Now he h

hdu1789Doing Homework again(贪心)

题目链接: 啊哈哈,点我点我 思路: 这道题是简单的贪心..先按分数从大到小排序,然后将这个分数的截止日期从后向前扫描,如果碰到没有被标记的则这一天可以做这个作业... 题目: Doing Homework again Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 6451    Accepted Submission(s): 383

hdoj 1789 Doing Homework again 【贪心】

贪心策略:先按分数从大到小排序,分数一样,再按时间从小到大排序 分最高的越靠近期限完成,越好 话不多说直接看代码 题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1789 代码: #include<cstdio> #include<cstring> #include<algorithm> using std::sort; typedef struct{ int sco, time; }str; str s[1005]; bo

[2012山东ACM省赛] Pick apples (贪心,全然背包,枚举)

Pick apples Time Limit: 1000MS Memory limit: 165536K 题目描写叙述 Once ago, there is a mystery yard which only produces three kinds of apples. The number of each kind is infinite. A girl carrying a big bag comes into the yard. She is so surprised because s

HDU1789 Doing Homework again 做作业【贪心】

题目链接:https://vjudge.net/problem/HDU-1789 题目大意: 给出N个作业的截至日期,和N个作业不交所扣掉的分数,要求输出扣除分数做少的方案. 解析: 与上一道销售商品类似,将分数从大到小排序,找到deadline,如果它的期限没有被占用,就在该天写完,然后vis置1,如果占用,则从它的前一天开始向前查找有没有空闲的日期,如果有则占用,vis置1.这样就可以得到最大分数.然后用总分数减去得到最大分数即为扣除的最小分数. #include <cstdio> #in

贪心初步 hdu1789 Doing Homework again

一道非常经典的题目 题目地址 题目大意 给出N个作业的截至日期,和N个作业不交所扣掉的分数,要求输出扣除分数做少的方案. 正确的策略是: 扣除分数大的先做 扣除分数相同,先截止的先做 做一件事的时候,从截止时间开始向第一天遍历,如果当天没有被作业占据则标记为占据.做这件事的日期越大越好. 如果不能满足3的条件,则为不能完成 1 #include <iostream> 2 #include <algorithm> 3 #include <string> 4 #includ

[2012山东ACM省赛] Pick apples (贪心,完全背包,枚举)

Pick apples Time Limit: 1000MS Memory limit: 165536K 题目描述 Once ago, there is a mystery yard which only produces three kinds of apples. The number of each kind is infinite. A girl carrying a big bag comes into the yard. She is so surprised because she

解题报告 HDU1789 Doing Homework again

Doing Homework again Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Description Ignatius has just come back school from the 30th ACM/ICPC. Now he has a lot of homework to do. Every teacher gives him a deadline of handing

杭电 1789 Doing Homework again (贪心 求最少扣分)

Description zichen has just come back school from the 30th ACM/ ICPC. Now he has a lot of homework to do. Every teacher gives him a deadline of handing in the homework. If zichen hands in the homework after the deadline, the teacher will reduce his s