• [POJ2287][Tyvj1048]田忌赛马 (贪心+DP)


    瞎扯

    很经典的一道题

    考前才打

    我太菜了QAQ

    就是先贪心排序了好

    然后在DP

    这样比直接DP更容易理解

    (其实这题做法还有很多)

    代码

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<algorithm>
     4 #define N 1005
     5 using namespace std;
     6 int n,money,t[N],q[N];
     7 int f[N][N];
     8 bool cmp(int a,int b)
     9 {
    10     return a>b;
    11 }
    12 int cpt(int i,int j){
    13     if(t[i]>q[j]) return 200;
    14     else if(t[i]==q[j]) return 0;
    15     return -200;
    16 }
    17 int main()
    18 {
    19     int i,j,ans=-999999999;
    20     while(scanf("%d",&n)==1&&n){
    21         memset(f,0,sizeof(f));
    22         memset(t,0,sizeof(t));
    23         memset(q,0,sizeof(q));
    24         ans=-99999999;
    25         for(int i=1;i<=n;i++){
    26             scanf("%d",&t[i]);
    27         }
    28         for(int i=1;i<=n;i++){
    29             scanf("%d",&q[i]);
    30         }
    31         sort(q+1,q+1+n,cmp);
    32         sort(t+1,t+1+n,cmp);
    33         for(int i=1;i<=n;i++){
    34             f[i][j]=f[i-1][j-1]+cpt(i,i);
    35             f[i][0]=f[i-1][0]+cpt(n-i+1,i);
    36             for(int j=1;j<=n;j++){
    37                 f[i][j]=max(f[i-1][j-1]+cpt(j,i),f[i-1][j]+cpt(n-(i-j)+1,i));
    38             }
    39         }
    40         for(int j=0;j<=n;j++){
    41             if(ans<f[n][j]) ans=f[n][j];
    42         }
    43         printf("%d
    ",ans);
    44     }
    45     return 0;
    46 }
  • 相关阅读:
    「LibreOJ NOI Round #2」不等关系
    Atcoder Grand Contest 036 D
    「CTS2019」氪金手游
    「CTS2019」珍珠
    「APIO2016」烟花表演
    「PKUWC2018/PKUSC2018」试题选做
    「PKUWC2018」猎人杀
    「WC 2019」数树
    CodeForces 794 G.Replace All
    「BZOJ 4228」Tibbar的后花园
  • 原文地址:https://www.cnblogs.com/lincold/p/9879054.html
Copyright © 2020-2023  润新知