codeforces 366C C. Dima and Salad(dp)
3965 단어 dpcodeforces
제목 링크:
codeforces 366C
제목 대의:
n개의 아이템을 주고 두 개의 속성이 있습니다. 마지막 첫 번째 속성의 총계가 두 번째 속성의 k배냐고 물었을 때 첫 번째 속성이 가장 크면 얼마입니까?
제목 분석:
4
AC 코드:
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#define MAX 107
using namespace std;
int dp[MAX*MAX],dd[MAX*MAX];
int n,k,a[MAX],b[MAX],c[MAX];
int main ( )
{
while ( ~scanf ( "%d%d" , &n , &k ) )
{
for ( int i = 0 ; i < n ; i++ )
scanf ( "%d" , &a[i] );
for ( int i = 0 ; i < n ; i++ )
scanf ( "%d" , &b[i] );
for ( int i = 0 ; i < n ; i++ )
c[i] = a[i]-b[i]*k;
memset ( dp , -0x3f , sizeof ( dp ) );
memset ( dd , -0x3f , sizeof ( dd ) );
dp[0] = dd[0] = 0;
for ( int i = 0 ; i < n ; i++ )
if ( c[i] >= 0 )
for ( int j = 10000 ; j >= c[i] ; j-- )
dp[j] = max ( dp[j-c[i]]+a[i] , dp[j] );
for ( int i = 0 ; i < n ; i++ )
if ( c[i] < 0 )
{
c[i] = -c[i];
for ( int j = 10000 ; j >= c[i] ; j-- )
dd[j] = max ( dd[j-c[i]]+a[i] , dd[j] );
}
int ans = -1;
for ( int i = 0; i <= 10000 ; i++ )
{
if ( dd[i] == 0 && dp[i] == 0 )
continue;
ans = max ( ans , dp[i]+dd[i] );
}
printf ( "%d
" , ans );
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
【경쟁 프로 전형적인 90문】008의 해설(python)의 해설 기사입니다. 해설의 이미지를 봐도 모르는 (이해력이 부족한) 것이 많이 있었으므로, 나중에 다시 풀었을 때에 확인할 수 있도록 정리했습니다. ※순차적으로, 모든 문제의 해설 기사를 들어갈 예정입니다. 문자열...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.