[01가방][HAOI 2012] 볼륨 조절
제목 설명
기타리스트 한 명이 공연에 참가할 준비를 하고 있다.그는 공연할 때 항상 같은 음량을 사용하는 것을 좋아하지 않기 때문에, 그는 모든 노래를 결정하기 전에 한 번씩 음량을 바꾸어야 한다.공연이 시작되기 전에, 그는 모든 노래가 시작되기 전에 그가 바꾸고 싶은 음량이 얼마나 되는지 리스트를 작성했다.매번 음량을 바꿀 때마다 그는 높일 수도 있고 낮출 수도 있다.
음량을 정수로 묘사하다.파일의 정수 Begin Level을 입력하면 기타가 처음 시작되는 볼륨을 나타내고, 정수 max Level은 기타의 최대 볼륨을 나타냅니다.음량은 0보다 작거나 maxLevel보다 크면 안 됩니다.입력 중 n개의 정수 c1, c2, c3을 지정했습니다.cn, i곡이 시작되기 전에 기타리스트가 바꾸고 싶은 음량이 얼마나 되는지 나타낸다.
기타리스트는 마지막 곡을 최대 음량으로 연주하고 싶은데, 너의 임무는 이 최대 음량을 찾는 것이다.
입력 출력 형식
[형식 입력]:
첫 번째 줄은 세 개의 정수 n, begin Level, max Level 순이다.
두 번째 줄은 n개의 정수 c1, c2, c3,...,cn.
데이터 크기 조정:
1<=n<=50, 1<=ci<=maxLevel, 1<=maxLevel<=1000, 0<=beginLevel<=maxLevel
[출력 형식]:
마지막 곡을 연주하는 최대 음량을 출력하다.만약 기타리스트가 음량이 0보다 낮거나 maxLevel보다 높다면 출력은 -1이다.
[샘플 입력]: [샘플 출력]
3 5 10 10
5 3 7
F[i, j]는 i번 트랙 시 음량 j가 도달할 수 있는지를 나타낸다.
F【0】【befinLevel】=1 초기화;
가방 DP를 만들면 됩니다.
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
int n,s,maxx;
bool f[55][1005];
int main()
{
scanf("%d%d%d",&n,&s,&maxx);
f[0][s]=1;
for(int i=1;i<=n;i++)
{
int x;
scanf("%d",&x);
for(int j=0;j<=maxx;j++)
{
if(j-x>=0&&f[i-1][j-x])
{
f[i][j]=1;
}
if(j+x<=maxx&&f[i-1][j+x])
{
f[i][j]=1;
}
}
}
for(int i=maxx;i>=0;i--)
{
if(f[n][i])
{
printf("%d",i);
return 0;
}
}
printf("-1");
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[BOJ]11048(python)python 풀이 DP를 이용해 풀이 보통 이런 문제는 dfs나 bfs로 풀이하는 것이여서 고민을 했는데 이 문구 덕분에 DP 를 이용해 풀이할 수 있었다 뒤로 돌아가는 등의 경우를 고려하지 않아도 되기 때문이다 코...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.