poj1160 Post Office
1465 단어 동적 기획
4
10 5
1 2 3 6 7 9 11 22 44 50
10개의 작은 마을이 있고 5개의 우체국이 있다는 뜻으로 우체국을 설치하면 모든 마을이 가장 가까운 우체국까지의 거리를 최소화할 수 있다.작은 마을의 좌표는 1, 2, 3, 6, 7, 9, 11, 22, 44, 50이다
상태 정의:
dp[i][j]는 [0,i] 이 i+1개 마을에 j개 우체국의 가장 작은 손가락을 놓았다는 것을 나타낸다
상태 전환:
dp[i][j]=dp[k][j-1]+L[k+1][i]L[i][j]는 [i, j]가 우체국을 놓을 때의 가장 작은 손가락을 나타낸다. 0<=k코드:
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
int dp[330][40];//dp[i][j] 0,,,i j
int L[330][330];//L[i][j] [i,j]
int village[330];
void Run(int i,int j)
{
int mid=(i+j)/2;
L[i][j]=0;
for(int k=i;k<=j;k++)
{
L[i][j]+=abs(village[mid]-village[k]);
}
}
void RunDp(int i,int j)// dp[i][j] [0,i]
{
if(j==1)
{
if(L[0][i]==-1)
{
Run(0,i);
}
dp[i][j]=L[0][i];
return;
}
if(i==0)
{
if(j>=1)
{
dp[i][j]=0;
}
return;
}
for(int k=0;k<i;k++)
{
if(dp[k][j-1]==-1)
{
if(k==0&&j==1)
{
k=0;
}
RunDp(k,j-1);
}
if(L[k+1][i]==-1)
{
Run(k+1,i);
}
if(dp[i][j]==-1||dp[i][j]>dp[k][j-1]+L[k+1][i])
{
dp[i][j]=dp[k][j-1]+L[k+1][i];
}
}
}
int main()
{
int V,P;
while(~scanf("%d%d",&V,&P))
{
memset(dp,-1,sizeof(dp));
memset(L,-1,sizeof(L));
for(int i=0;i<V;i++)
{
scanf("%d",&village[i]);
}
RunDp(V-1,P);
printf("%d
",dp[V-1][P]);
}
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
01 가방, 완전 가방, 다중 가방 dp(동적 기획 입문 dp)01 가방은 2진법으로 직접 표시할 수 있지만 데이터 양이 너무 많으면 시간을 초과하는 것이 폭력이다.01 가방의 사상은 바로 이 물품에 대해 내가 넣은 가치가 큰지 안 넣은 가치가 큰지 비교하여 방정식 f[i][v...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.