D - thạch tử hợp tịnh vấn đề
Description
Tại nhất cá viên hình thao tràng đích tứ chu bãi phóng trứ n đôi thạch tử. Hiện yếu tương thạch tử hữu thứ tự địa hợp tịnh thành nhất đôi. Quy định mỗi thứ chỉ năng tuyển tương lân đích 2 đôi thạch tử hợp tịnh thành tân đích nhất đôi, tịnh tương tân đích nhất đôi thạch tử sổ ký vi cai thứ hợp tịnh đích đắc phân. Thí thiết kế nhất cá toán pháp, kế toán xuất tương n đôi thạch tử hợp tịnh thành nhất đôi đích tối tiểu đắc phân hòa tối đại đắc phân.
Đối vu cấp định n đôi thạch tử, kế toán hợp tịnh thành nhất đôi đích tối tiểu đắc phân hòa tối đại đắc phân.
Input
Thâu nhập sổ cư đích đệ 1 hành thị chính chỉnh sổ n, 1≤n≤100, biểu kỳ hữu n đôi thạch tử. Đệ nhị hành hữu n cá sổ, phân biệt biểu kỳ mỗi đôi thạch tử đích cá sổ.
Output
Thâu xuất sổ cư hữu lưỡng hành, đệ 1 hành trung đích sổ thị tối tiểu đắc phân, đệ 2 hành trung đích sổ thị tối đại đắc phân.
Sample
Input
4
4 4 5 9
Output
43
54
Loại tự củ trận liên thừa vấn đề
Tương đồng: Đô thị mỗi thứ tuyển tương lân đích lưỡng cá
Bất đồng: ( tại nhất cá viên hình thao tràng đích tứ chu ) vi thành nhất cá quyển, tựu thị khả dĩ thủ vĩ tương liên
Giải quyết thủ vĩ tương liên tựu tương tự liệt tại sổ tổ lí ký lưỡng biến,
Giá kỉ cá khu gian phân biệt cầu xuất tối đại tối tiểu, tối hậu tương giá kỉ cá khu gian đích tối đại tối tiểu nã xuất lai bỉ giác
Mỗi cá khu gian lí đích max min cầu pháp dữ củ trận liên thừa loại tự đãn chuyển di phương trình bất đồng
#include<iostream>
#include<algorithm>
#include<memory.h>
#defineinf 0x3f3f3f3f
usingnamespacestd;
intmain()
{
intn,i,j,k,a[202],dp[202][202],dpm[202][202];
cin>>n;
memset(dp,0,sizeof(dp));
memset(dpm,0,sizeof(dpm));
for(i=1;i<=n;i++)
{
cin>>a[i];
a[i+n]=a[i];
}
intsum[202];sum[0]=0;
for(i=1;i<=2*n;i++)
{
sum[i]=sum[i-1]+a[i];
}
for(i=2*n-1;i>=1;i--)
{
for(j=i+1;j<i+n&&j<=2*n;j++)
{
dpm[i][j]=inf;
for(k=i;k<j;k++)
{
dp[i][j]=max(dp[i][j],dp[i][k]+dp[k+1][j]+sum[j]-sum[i-1]);// giá thị trọng điểm
dpm[i][j]=min(dpm[i][j],dpm[i][k]+dpm[k+1][j]+sum[j]-sum[i-1]);
}
}
}
intmaxx=-1,minn=inf;
for(i=1;i<=n;i++)//n cá khu gian đích trị tiến hành bỉ giác
{
maxx=max(maxx,dp[i][i+n-1]);
minn=min(minn,dpm[i][i+n-1]);
}
cout<<minn<<endl;
cout<<maxx<<endl;
return0;
}