UVa Problem 10271 젓가락 (젓가락)
// Chopsticks ( )
// PC/UVa IDs: 111107/10271, Popularity: B, Success rate: average Level: 3
// Verdict: Accepted
// Submission Date: 2011-10-18
// UVa Run Time: 0.100s
//
// (C)2011, 。metaphysis # yeah dot net
//
// [ ]
// badness[i][j] j i ,length[j]
// j , :
//
// badness[i][j] = min{badness[i][j - 1], badness[i - 1][j - 2] + (length[j] -
// length[j - 1]) * (length[j] - length[j - 1) | j >= 3 * i - 1}
//
// ( ):
//
// ...,C1,C2,C3,...
//
// , C1 < C2, C1 , C2 。
// 。 C1 C2 , C1 C2 C1
// , 。 ,
// , 。
#include <iostream>
using namespace std;
#define MAXN 5001
int length[MAXN];
int badness[MAXN];
int difference[MAXN];
int nGuests, nChopsticks;
// 。
int dynamic_programming()
{
for (int i = 0; i <= nChopsticks; i++)
badness[i] = 0;
for (int i = 1; i <= nGuests; i++)
{
int setted = nChopsticks - 3 * (nGuests - i);
for (int j = setted - 1; j >= 2 * i; j--)
badness[j] = badness[j - 2] + difference[j];
for (int j = 2 * i + 1; j <= setted - 1; j++)
badness[j] = min(badness[j], badness[j - 1]);
badness[setted] = badness[setted - 1];
}
cout << badness[nChopsticks] << endl;
}
int main(int ac, char *av[])
{
int cases;
cin >> cases;
while (cases--)
{
cin >> nGuests >> nChopsticks;
nGuests += 8;
for (int i = 1; i <= nChopsticks; i++)
{
cin >> length[i];
difference[i] = length[i] - length[i - 1];
difference[i] *= difference[i];
}
dynamic_programming();
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Docker를 사용한 React 및 .NET Core 6.0 샘플 프로젝트 - 1부이 기사에서는 Entity Framework Core Code First 접근 방식을 사용하는 ASP.NET Core 6.0 WEP API의 CRUD(만들기, 읽기, 업데이트 및 삭제) 작업에 대해 설명합니다. 웹 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.