zoukankan      html  css  js  c++  java
  • 洛谷 P1541 乌龟棋 & [NOIP2010提高组](dp)

    传送门


    解题思路

    一道裸的dp。

    用dp[i][j][k][kk]表示用i个1步,j个2步,k个3步,kk个4步所获得的最大价值,然后状态转移方程就要分情况讨论了(详见代码)

    然后就是一开始统计一下几步的卡片共有几张存在num里。

    这道题的范围小,所以可以大胆的用思维数组QAQ!!!

    AC代码

     1 #include<iostream>
     2 using namespace std;
     3 const int maxn=355;
     4 int n,m,a[maxn],num[5];
     5 int dp[45][45][45][45];
     6 int main()
     7 {
     8     cin>>n>>m;
     9     for(int i=0;i<=n-1;i++){
    10         cin>>a[i];
    11     }
    12     for(int i=1;i<=m;i++){
    13         int x;
    14         cin>>x;
    15         num[x]++;
    16     }
    17     for(int i=0;i<=num[1];i++){
    18         for(int j=0;j<=num[2];j++){
    19             for(int k=0;k<=num[3];k++){
    20                 for(int kk=0;kk<=num[4];kk++){
    21                     int now=1*i+2*j+3*k+4*kk;
    22                     if(i!=0) dp[i][j][k][kk]=max(dp[i][j][k][kk],dp[i-1][j][k][kk]+a[now]);
    23                     if(j!=0) dp[i][j][k][kk]=max(dp[i][j][k][kk],dp[i][j-1][k][kk]+a[now]);
    24                     if(k!=0) dp[i][j][k][kk]=max(dp[i][j][k][kk],dp[i][j][k-1][kk]+a[now]);
    25                     if(kk!=0) dp[i][j][k][kk]=max(dp[i][j][k][kk],dp[i][j][k][kk-1]+a[now]);
    26                 }
    27             }
    28         }
    29     }
    30     cout<<dp[num[1]][num[2]][num[3]][num[4]]+a[0];
    31     return 0;
    32 }

    //NOIP2010提高组 t2

  • 相关阅读:
    业务逻辑安全之登陆认证模块
    linux下的tcpdump
    wirshark使用(二)
    wirshark 使用(一)
    MVC框架的代码审计小教程
    记一次发卡网代码审计
    HTML知识点(一)
    jQuery基础、效果和事件
    Ajax知识(二)
    jQueryHTML和插件、display和overflow和visibility的区别
  • 原文地址:https://www.cnblogs.com/yinyuqin/p/11854258.html
Copyright © 2011-2022 走看看