【dp】직선 2중치 문제
1663 단어 동적 기획
직선 L 및 L에 n+1 점 x 0 < x1 <...x="">n.직선 L에 있는 모든 점xi는 하나의 권한을 가진다 w(xi).각각의 방향변(xi,xi-1)도 있고 비음변장 d(xi,xi-1)도 있다.직선 L에 있는 각 점xi는 고객으로 볼 수 있는데 그 서비스 수요량은 w(xi)이다.각 변(xi,xi-1)의 변장 d(xi,xi-1)는 운송 비용으로 볼 수 있다.만약에 점xi처에 서비스 기구를 설치하지 않으면 점xi처의 서비스 수요를 점xj처로 이동하는 서비스 기구가 지불해야 하는 서비스 이전 비용을 w(xi)*d(xi,xj)로 한다.점x0에 서비스 기구를 설치했고 현재 직선 L에 2곳의 서비스 구조를 증설하여 전체 서비스 이전 비용을 최소화해야 한다.
프로그래밍 작업:
주어진 직선 L에 대해 프로그래밍은 직선 L에 2곳의 서비스 기구를 증설하는 최소 서비스 이전 비용을 계산한다.
데이터 입력:
입력한 첫 번째 줄에는 양의 정수 n이 있는데 이것은 직선 L에 점x0 외에 n개의 점x01<...>n.다음 n 줄에는 줄마다 두 개의 정수가 있다.i+1행의 두 정수는 각각 w(xn-i-1)와 d(xn-i-1, xn-i-2)를 나타낸다.
결과 출력:
출력 계산의 최소 서비스 이전 비용.
예제:
9 1 2 2 1 3 3 1 1 3 2 1 6 2 1 1 2 1 1
26
핵심 사상:
322의 m를 2로 바꾸면 더 좋은 해석이 있을 것 같아서 몰라요.
4
var
f:array[0..20010]of longint;
dist,wt,swt:array[0..20010]of longint;
n,m:longint;
procedure init;
var
d,w,i:longint;
begin
dist[1]:=0;wt[0]:=0;swt[1]:=0;
readln(n);
m:=2;
readln(wt[1],dist[2]);
fori:=2 to n do
begin
readln(w,d);
wt[i]:=wt[i-1]+w;
dist[i+1]:=dist[i]+d;
swt[i]:=swt[i-1]+w*dist[i];
end;
end;
function getw(x,y:longint):longint;
begin
ifx>y then exit(0)
else exit((wt[y-1]-wt[x])*dist[y]-(swt[y-1]-swt[x]));
end;
procedure comp;
var
i,j,k,tmp:longint;
begin
fori:=1 to n do f[i]:=getw(0,i+1);
forj:=1 to m do
begin
for i:=n downto j+1 do
begin
f[i]:=getw(1,i+1);
for k:=2 to i do
begin
tmp:=f[k-1]+getw(k,i+1);
if tmp
제목 출처: 제3장 동태적 기획
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 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에 따라 라이센스가 부여됩니다.