(Jizhong) 2,210 인터뷰 (인터뷰) DP]

(파일 IO) : 입력 : interview.in 출력 : interview.out
시간 제한 : 1000 MS 공간 제약 : 131,072킬로바이트의 특정 제한
고토 ProblemSet


제목 설명
당신이 기자이야, 당신은 지금 인터뷰 필요 국가의 지도자. 당신의 시간을 소비하기 위해 각 국가의 필요의 지도자들과의 인터뷰 [ 나는 ] t [i]를 ,하지만 당신은 가치를 얻을 수 있습니다 v [ i ] V [I] 정보는 다음 ...... 쓰기 보고서에 수
그러나 당황 적대 관계에 속하는 국가들 사이에 어떤 관계가 한 나라의 지도자는 자신의 적대적인 상태 지도자들과 이야기 것을 알고 그렇다면 있다는 것입니다, 그는 그는 인터뷰를 거부합니다. 즉, 해당 국가의 인터뷰는, 모든 국가는 한 쌍은 적대적인 관계를 구성 선택할 수 있습니다, 당신은 당신의 인터뷰를 완료 할 수있을 것입니다, 또는 어떤 부분은 아무것도 올 것이다.
당신의 B o s s 사장님 그가 당신에게 시간 제한을 준 T 당신이 제한 시간 내에 인터뷰 작업을 완료하지 않은 경우, 당신은 해고 될 것입니다. 물론, 그는 당신이 시간을 제한하고 싶어 T 최대 이내에 완료 인터뷰의 값의 합은 추가 할 수 있습니다.


입력
첫 번째 행의 세 개의 숫자를 가지며, 첫 번째 숫자는 제한 시간은 T , 두 번째 숫자는 국가의 수 n , 세 번째 숫자는 적대적 국가 사이 그룹의 수는 m 미디엄 .
다음 n 개의 번호의 라인은 첫 번째 숫자는 t [ i ] t [i]를 , 두 번째 숫자는 v [ i ] V [I] .
다음 m 미디엄 행의 각 행은 구비 m [ i ] + 1 m [I] +1 제 입력 개수 m [ i ] 미] ,이 그룹에는 입력 후, 국가 적대적인 관계의 총 개수를 나타낸다 m [ i ] 미] 나타내는 숫자 m [ i ] 미] 각각 양국 이루어진 국가 그룹 대립 관계를 (임의의 두 상태 사이에 적대적인 관계가이 그룹 등 적대적인 관계가있는 1 3 4 1,3,4, 그때 1 1 3 1 3,1 4 3 4,3 4 4 경우) 적대적인 관계를 구성 m [ i ] = 1 m [I] = 1 ,이 나라와 다른 나라는 적대 관계를 구성하지 않습니다.

출력
의 최대 값을 나타내는 정수 V V .


입력 샘플
10 2.5
. 5 (10)
. 제 9
. 6.3
. (1) (13)이다
. 제 1
. 3 1 3 4
2 2 5

출력 샘플
(22)


데이터 범위 제한
60 (60) 데이터 % m = 1 m = 1 ;
100 (100) 데이터 % 0 T 50000 0 n 500 1 m 10 n = m [ i ] 0≤T≤50000,0≤n≤500,1≤m≤10 N = ΣM [I] , 즉 m [ 1 ] + m [ 2 ] + . . . . . = n m [1] + m [2] + N = ..... , 한 번만 각 국가 수의 적대 관계.


문제 해결 아이디어

DP :
그림 삽입 설명 여기


코드

#include<iostream>
#include<cstring>
#include<string>
#include<cstdio>
#include<algorithm>
#include<string>
#include<iomanip>
#include<cmath>
using namespace std;
int t,n,m,tt[510],v[510],mm[15][510],x,f[15][510];
int main(){
    freopen("interview.in","r",stdin);
    freopen("interview.out","w",stdout);
    scanf("%d%d%d",&t,&n,&m);
    for(int i=1;i<=n;i++)
        scanf("%d%d",&tt[i],&v[i]);
    for(int i=1;i<=m;i++)
    {
        scanf("%d",&mm[i][0]);
        for(int j=1;j<=mm[i][0];j++)
            scanf("%d",&mm[i][j]);
    }
    for(int i=1;i<=m;i++)
    {
        for(int j=0;j<=t;j++)
            f[i][j]=f[i-1][j];
        for(int j=1;j<=mm[i][0];j++)
        {
            for(int k=t;k>=tt[mm[i][j]];k--)
            f[i][k]=max(f[i][k],f[i-1][k-tt[mm[i][j]]]+v[mm[i][j]]);
        }
    }
    printf("%d",f[m][t]);
}
게시 된 119 개 원래 기사 · 원 찬양 8 · 전망 4919

추천

출처blog.csdn.net/kejin2019/article/details/104828234