zoukankan      html  css  js  c++  java
  • poj 2287 动态规划

    用贪心简单证明之后就是一个从两头取的动态规划

    #include <iostream>
    #include <cstring>
    #include <cstdio>
    #include <algorithm>
    using namespace std;
    const int maxn=1e3+9;
    int a[maxn],b[maxn];
    int dp[maxn][maxn];
    
    bool cmp(int a,int b)
    {
        return a>b;
    }
    
    int main()
    {
        int n;
        while(scanf("%d",&n),n)
        {
            for(int i=1;i<=n;i++)
            scanf("%d",&a[i]);
            for(int i=1;i<=n;i++)
            scanf("%d",&b[i]);
            sort(a+1,a+1+n,cmp);
            sort(b+1,b+1+n,cmp);
            memset(dp,200,sizeof(dp));
            dp[0][0]=0;
            for(int i=0;i<=n;i++)
            for(int j=0;j+i<n;j++)
            {
                if(a[i+1]>b[i+j+1])
                dp[i+1][j]=max(dp[i+1][j],dp[i][j]+200);
                else if(a[i+1]<b[i+j+1])
                dp[i+1][j]=max(dp[i+1][j],dp[i][j]-200);
                else
                dp[i+1][j]=max(dp[i+1][j],dp[i][j]);
    
                if(a[n-j]>b[i+j+1])
                dp[i][j+1]=max(dp[i][j+1],dp[i][j]+200);
                else if(a[n-j]<b[i+j+1])
                dp[i][j+1]=max(dp[i][j+1],dp[i][j]-200);
                else
                dp[i][j+1]=max(dp[i][j+1],dp[i][j]);
            }
            int ans=-1e7;
            for(int i=0;i<=n;i++)
            ans=max(ans,dp[i][n-i]);
            cout<<ans<<endl;
        }
        return 0;
    }
    


  • 相关阅读:
    显示非模式窗口和模式窗口
    delphi 版本号
    数字证书和签名
    DLL知道自己的位置
    拖动处理
    驱动配置相关
    python sturct模块操作C数据
    Lambda学习笔记
    【转】update select
    [转]视频格式分类
  • 原文地址:https://www.cnblogs.com/james1207/p/3279727.html
Copyright © 2011-2022 走看看