CF830A Office Keys

水题?
初始化一下
dp[i][j]为第i个人拿了第k把钥匙花的时间
dp[i][j]=min(dp[i][j-1],max(dp[i-1][j-1],abs(a[i]-b[j])+abs(b[j]-p)));
为啥第二个是max呢,因为为了让最大的最小,所以让最小的最大,不证.

#include
#include
#include
#define LL long long 
using namespace std;
LL a[2005],b[2005],c[2005];
LL dp[2005][2005];
int main()
{
    LL n,k,p;
    cin>>n>>k>>p;
    for(LL i=1;i<=n;i++)
        cin>>a[i];
    for(LL i=1;i<=k;i++)
        cin>>b[i];
    sort(1+a,1+n+a);
    sort(1+b,1+k+b);
    memset(dp,-0xff,sizeof(dp));
    for(LL i=0;i<=k;i++)
        dp[0][i]=0;
    for(LL i=1;i<=n;i++)
        for(LL j=i;j<=k;j++)
            dp[i][j]=min(dp[i][j-1],max(dp[i-1][j-1],abs(a[i]-b[j])+abs(b[j]-p)));
    cout<

你可能感兴趣的:(codefoces)