zoukankan      html  css  js  c++  java
  • 免费馅饼

     1 #include<stdio.h>
     2 int sum[100005][15]={0},map[100005][15]={0};//map[t][x]记录在t秒时第x个位置有几个馅饼落下
     3 int max(int a,int b,int c)
     4 {
     5     if(a<b) a=b;
     6     if(a<c) a=c;
     7     return a;
     8 }
     9 //返回三个数中最大数的函数
    10 int main()
    11 {
    12     int i,j,k,l,n,m,maxtime,maxsum,a,b;
    13     while(scanf("%d",&n)!=EOF)
    14     {
    15         if(n==0) break;
    16         maxtime=0;
    17         for(i=1;i<=n;i++)
    18         {
    19             scanf("%d%d",&a,&b);
    20             map[b][a]++;
    21             if(maxtime<b) maxtime=b;//maxtime记录最大时间
    22         }
    23         for(i=0;i<=maxtime;i++)
    24             for(j=0;j<12;j++)
    25                 sum[i][j]=0;
    26 //对sum数组清零
    27         for(i=1;i<5;i++)
    28             for(j=i+1;j<=5;j++)
    29             {
    30                 map[i][5+j]=0;
    31                 map[i][5-j]=0;
    32             }
    33 //注意:因为前5秒时有些地方是到不了的,所以那里的馅饼直接无视清零;
    34         for(i=1;i<=maxtime;i++)
    35         {
    36             for(j=0;j<11;j++)
    37             {
    38                 sum[i][j]=max(sum[i-1][j-1],sum[i-1][j],sum[i-1][j+1])+map[i][j];//dp方程;
    39             }
    40         }
    41         maxsum=0;
    42         for(i=0;i<12;i++)
    43         {
    44             if(sum[maxtime][i]>maxsum) maxsum=sum[maxtime][i];
    45         }//选出最后时间中获得馅饼最多的数量;
    46         printf("%d
    ",maxsum);
    47         for(i=1;i<=maxtime;i++)
    48             for(j=0;j<11;j++)
    49                 map[i][j]=0;
    50 //把map清零;
    51     }
    52 }
    View Code
  • 相关阅读:
    阿里Java完整学习资料
    Android 矢量图详解
    关于 Android 状态栏的适配总结
    SSM框架视频资料
    hideSoftInputFromWindow
    微信支付
    git+coding.net记录篇
    ClassNotFoundException超限
    react native初步常见问题
    React Native windows搭建记录
  • 原文地址:https://www.cnblogs.com/NWUACM/p/6560990.html
Copyright © 2011-2022 走看看