[바 이 두 의 별] C: 도 도 곰 의 선물

시간 제한:
1000ms
메모리 제한:
65536kB
묘사 하 다.
도도 곰 은 자신의 Baidu 공간 을 가지 고 있 으 며, 도도 곰 은 때때로 공간 친구 에 게 선물 을 주어 도도 곰 과 친구 간 의 우정 치 를 높 인 다.도 도 곰 은 우연 한 기회 에 두 가지 슈퍼 선물 을 받 아 친구 들 에 게 슈퍼 선물 을 주기 로 했다.서로 다른 유형의 친구 들 이 서로 다른 선물 을 받 으 면 얻 을 수 있 는 기쁨 치 는 다르다.즐거움 치 평가 기준 은 다음 과 같 습 니 다. 모든 슈퍼 선물 은 두 가지 속성 (A, B) 을 가지 고 있 습 니 다. 친구 마다 두 가지 속성 (X, Y) 이 있 습 니 다. 만약 에 이 친구 가 이 슈퍼 선물 을 받 으 면 이 친구 가 받 는 즐거움 치 는 A * X + B * Y 입 니 다.
슈퍼 선물의 개수 제한 이 있 기 때문에 도도 곰 은 이 슈퍼 선물 들 을 어떻게 분배 해 야 친구 들 의 즐거움 을 합 칠 수 있 는 지 궁금 하 다.
입력
첫 번 째 줄 n 은 도 곰 의 친구 개 수 를 나타 낸다.
다음 n 줄 마다 두 개의 정 수 는 도 곰 의 친 한 친구 의 두 가지 속성 치 를 나타 낸다. Xi, Yi.
다음 2 줄, 줄 당 3 개의 정수 ki, Ai, Bi 는 도 곰 이 제 i 종의 슈퍼 선물의 개수 와 두 개의 속성 치 를 가지 고 있 음 을 나타 낸다.
1 < = n < = 1000, 0 < = Xi, Yi, Ai, Bi < = 1000, 0 < = ki < = n, 보증 k1 + k2 > = n
출력
한 줄 의 값 을 출력 하면 친구 의 기쁨 값 을 합 친 최대 값 을 표시 합 니 다.
샘플 입력
4
3 6
7 4
1 5
2 4
3 3 4
3 4 3

샘플 출력
118

욕심 법, 매번 마음 이 가장 많은 사람 에 게 가장 좋 은 선물.
아래 의 이 예 는 인터넷 에서 유래 한 것 이 바로 대응 사례 이다.최종 답 은 아 닐 것 이 니 정 해 를 주시 하 라.
#include <iostream>
using namespace std;
struct Node
{
    int a,b,n;
}a[2000];
struct Node2
{
    int n,a,b;
}b[2];

int main()
{
    int n,i,j;
    long long sum = 0;
    scanf("%d",&n);//     
    for(i=0;i<n;i++)//      A、B   
    {
        scanf("%d%d",&a[i].a,&a[i].b);
        a[i].n = 0;
    }
    scanf("%d%d%d%d%d%d",&b[0].n,&b[0].a,&b[0].b,&b[1].n,&b[1].a,&b[1].b);
    for(i=0;i<n;i++)
    {
        int max = -1;
        int liwu = -1;
        int sj = -1;
        for(j=0;j<n;j++)
        {
            if(a[j].n==1)//       
                continue;
            int temp1 = b[0].a*a[j].a+b[0].b*a[j].b;//        ,          
            int temp2 = b[1].a*a[j].a+b[1].b*a[j].b;
            if(b[0].n>0&&b[1].n>0)
            {
                if(temp1>=temp2&&temp1>max)
                    max = temp1,liwu = 0,sj=j;
                else if(temp2>temp1&&temp2>max)
                    max = temp2,liwu = 1,sj=j;
            } else if(b[0].n>0) //            
            {
                if(temp1>max)
                    max = temp1,liwu = 0,sj=j;
            } else if(b[1].n>0)
            {
                if(temp2>max)
                    max = temp2,liwu = 1,sj=j;
            }
        }
        if(max!=-1&&liwu!=-1)
        {
            sum += max;
            b[liwu].n--;
            a[sj].n=1;
        }
    }
    printf("%lld
",sum); return 0; }

 

좋은 웹페이지 즐겨찾기