zoukankan      html  css  js  c++  java
  • TOJ4587:抓苹果(DP)

     传送门:抓苹果

    dp(i,j) = max(dp(i-1,j-1),dp(i-1,j))+当i这分钟时能否刚好移动到这棵树下.

    初始化是对不移动的情况下。

    代码

    #include<bits/stdc++.h> 
    using namespace std;
    #define LL long long
    #define INF 2000000000
    #define eps 1e-8
    #define pi  3.141592653589793 
    int dp[1001][31];//第i分钟移动j次得到的最多苹果 
    int main()
    {
        int a[1001];
        memset(dp,0,sizeof(dp));
        int n,m;
        scanf("%d %d",&n,&m);
        for(int i = 1 ; i <= n ; i ++)scanf("%d",a+i);
        for(int i = 1 ; i <= n ; i++) dp[i][0] = dp[i-1][0]+(a[i]==1);
        //初始化,因为刚开始在1这棵树,按不移动(j==0)推状态 
        for(int i = 1 ; i <= n ; i ++){
            for(int j = 1 ; j <= m ; j++){
                dp[i][j]=max(dp[i-1][j],dp[i-1][j-1])+(a[i]==j%2+1);
                //从上个状态的最大值再加上是否站的位置刚好有苹果
                // 最初在1这个树下,移动奇数次能到2这棵树,移动偶数次能回到1这棵树 
                // 所以如果a[i]是j%2+1,即刚好在这棵树下,代表ta能接到苹果 
            }
        }
        int ans = 0;
        for(int i = 0  ; i <= m ; i++){
            ans = max(ans,dp[n][i]);
        }
        printf("%d
    ",ans);
    }
    /*
    7 2 
    2 
    1 
    1 
    2 
    2 
    1 
    1
    */
  • 相关阅读:
    Domino
    tomcat 部署 外网访问
    市场4
    android 源码下载编译
    SSIS
    代码审查工具
    mfc 常用控件
    屏蔽home
    MFC BEGIN_MESSAGE_MAP()
    社交产品
  • 原文地址:https://www.cnblogs.com/Esquecer/p/10853912.html
Copyright © 2011-2022 走看看