로스 욕심 알고리즘 주제 기념품 패킷 밸리 P1094

로스 욕심 알고리즘 주제 기념품 패킷 밸리 P1094

주제 :

설날에 접근, 학생들은 작품의 발행 Lele의 기념품 신년 파티에 책임이 있습니다. 얻은 파티 기념품 값으로 학생들이 상대적으로 균형 그래서 그는 기념품 가격에 따라 그룹화됩니다 사고 싶어하지만, 각 가격에 두 기념품 기념품으로 구성된 각까지 주어진를 초과 할 수 없습니다 정수입니다. 가장 짧은 시간에 완성 모든 기념품, 렐레 패킷의 최소 수를 원하는 것을 보장한다.

당신의 임무는 모든 패킷은 패킷 출력의 최소 수를 하나의 프로그램 패킷의 최소 번호를 찾을 수있는 프로그램을 작성하는 것입니다.

해상도 :

이 질문에

그리고 P1090

매우 유사한

그러나 하나입니다

최소한의

추가의 최소 번호입니다

특정 제한이

그래서 다른

여기에 분석은 다음과 같습니다

이 질문에

먼저, 첫 번째 정렬

최소한으로

그리고 가장 큰 비율

다운의 비율

단어 찾기

더미에 수 있기 때문에

그렇지 않으면 넣어

그 숫자가 제거

아주 간단한

다음과 같이 코드입니다 :

#include<bits/stdc++.h>
#include<iostream>
#include<cstdlib>
#include<cstdio>
using namespace std;
int n,a[30001],m,d,sum=0;
int main()
{
    freopen("P1094_6.in","r",stdin);
    freopen("P1094_6.out","w",stdout);
    bool flag=true,flag2[30001];
    memset(flag2,0,sizeof(flag2));
    cin>>m;
    cin>>n;
    for(int i=1;i<=n;i++)
    cin>>a[i];
    sort(a+1,a+n+1);
    for(int i=1;i<=n;i++)
    {
        flag=true;
        for(int j=n;j>i;j--)
        {
            if(a[i]+a[j]<=m&&flag2[i]==0&&flag2[j]==0)
            {
                flag2[i]=1;
                flag2[j]=1;
                //cout<<a[i]<<" "<<a[j]<<endl;
                flag=false;
                d=j;
                break;
            }
        }
        if(flag==false)
        {
            for(int j=d;j<=n-1;j++)
            a[j]=a[j+1];
            n--;
        }
        //else cout<<a[i]<<endl;;
        sum++;
    }
    cout<<sum<<endl;
    return 0;
}
안녕! ! ! ! ! ! !
게시 24 개 원래 기사 · 원의 칭찬 0 · 조회수 595

추천

출처blog.csdn.net/zliang_ma/article/details/104671567