(파일 IO) : 입력 : interview.in 출력 : interview.out
시간 제한 : 1000 MS 공간 제약 : 131,072킬로바이트의 특정 제한
고토 ProblemSet
제목 설명
당신이 기자이야, 당신은 지금 인터뷰 필요
국가의 지도자. 당신의 시간을 소비하기 위해 각 국가의 필요의 지도자들과의 인터뷰
,하지만 당신은 가치를 얻을 수 있습니다
정보는 다음 ...... 쓰기 보고서에 수
그러나 당황 적대 관계에 속하는 국가들 사이에 어떤 관계가 한 나라의 지도자는 자신의 적대적인 상태 지도자들과 이야기 것을 알고 그렇다면 있다는 것입니다, 그는 그는 인터뷰를 거부합니다. 즉, 해당 국가의 인터뷰는, 모든 국가는 한 쌍은 적대적인 관계를 구성 선택할 수 있습니다, 당신은 당신의 인터뷰를 완료 할 수있을 것입니다, 또는 어떤 부분은 아무것도 올 것이다.
당신의
그가 당신에게 시간 제한을 준
당신이 제한 시간 내에 인터뷰 작업을 완료하지 않은 경우, 당신은 해고 될 것입니다. 물론, 그는 당신이 시간을 제한하고 싶어
최대 이내에 완료 인터뷰의 값의 합은 추가 할 수 있습니다.
입력
첫 번째 행의 세 개의 숫자를 가지며, 첫 번째 숫자는 제한 시간은
, 두 번째 숫자는 국가의 수
, 세 번째 숫자는 적대적 국가 사이 그룹의 수는
.
다음
개의 번호의 라인은 첫 번째 숫자는
, 두 번째 숫자는
.
다음
행의 각 행은 구비
제 입력 개수
,이 그룹에는 입력 후, 국가 적대적인 관계의 총 개수를 나타낸다
나타내는 숫자
각각 양국 이루어진 국가 그룹 대립 관계를 (임의의 두 상태 사이에 적대적인 관계가이 그룹 등 적대적인 관계가있는
그때
및
및
및
경우) 적대적인 관계를 구성
,이 나라와 다른 나라는 적대 관계를 구성하지 않습니다.
출력
의 최대 값을 나타내는 정수
.
입력 샘플
10 2.5
. 5 (10)
. 제 9
. 6.3
. (1) (13)이다
. 제 1
. 3 1 3 4
2 2 5
출력 샘플
(22)
데이터 범위 제한
데이터 %
;
데이터 %
, 즉
, 한 번만 각 국가 수의 적대 관계.
문제 해결 아이디어
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]);
}