월드컵
1109 단어 DP
데이터가 100000이기 때문에 두 번 반복할 때 시간 초과가 필요합니다.
그리고 i번 도시가 1번 도시로 돌아갈 수 있도록.
따라서 dp[i]와 dp[i+ct]로 i번째 도시의 w-l를 표시한다
그래서 한 번만 훑어보면
num의 누적과 0보다 크면 된다
왜냐하면 가장 많이ct개 도시를 방문할 수 있으니까.
그래서 tmp>ct만 있으면 브레이크를 최적화할 수 있어요.
#include
int main ( ) {
int ct, w, l, dp[210000], num;
while ( scanf ( "%d", &ct ) != EOF ) {
for ( int i = 1; i <= ct; ++i ) {
scanf ( "%d%d", &w, &l);
dp[i] = dp[i + ct] = w - l;
}
int tmp = 0, ans = 0;
num = 0;
for ( int i = 1; i <= ct * 2; ++i ) {
num += dp[i];
tmp++;
if ( num < 0 ) {
num = 0;
tmp = 0;
}
if ( tmp > ans ) ans = tmp;
if ( tmp >= ct ) break;
}
if ( ans > ct ) ans = ct;
printf ( "%d
", ans );
}
}
~
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 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에 따라 라이센스가 부여됩니다.