• P1541 乌龟棋


    99%的WA都是因为手残

    P1541 乌龟棋

    题解

    这题可以用DP做

    首先记录下棋盘上的分数,然后开一个数组记录每种卡片的数目

    下面关键:

    dp[ ][ ][ ][ ]  四维DP记录每种卡片各用了多少张时得到的最大分数

    ans就是把所有卡片都用上时的分数啦

    代码

    #include<iostream>
    #include<cstdio>
    #include<string>
    #include<cstring>
    #include<algorithm>
    #include<cmath>
    #include<cstdlib>
    
    using namespace std;
    
    int n,m;
    int pan[355],card[5],dp[45][45][45][45];
    
    int main()
    {
        scanf("%d%d",&n,&m);
        for(int i=1;i<=n;i++)
          scanf("%d",&pan[i]);
        for(int i=1;i<=m;i++)
        {
            int k;
            scanf("%d",&k);
            card[k]++;
        }
        
        dp[0][0][0][0]=pan[1];
        
        for(int i=0;i<=card[1];i++)
          for(int j=0;j<=card[2];j++)
            for(int k=0;k<=card[3];k++)
              for(int l=0;l<=card[4];l++)
              {
                  int pos=1+i*1+j*2+k*3+l*4;  //用了这些卡片后走到的位置 
                  if(i) dp[i][j][k][l]=max(dp[i][j][k][l],dp[i-1][j][k][l]+pan[pos]);
                  if(j) dp[i][j][k][l]=max(dp[i][j][k][l],dp[i][j-1][k][l]+pan[pos]);
                  if(k) dp[i][j][k][l]=max(dp[i][j][k][l],dp[i][j][k-1][l]+pan[pos]);
                  if(l) dp[i][j][k][l]=max(dp[i][j][k][l],dp[i][j][k][l-1]+pan[pos]);
                //确保这种卡片数目不为0才可以选择,然后转移 
              }
        
        printf("%d
    ",dp[card[1]][card[2]][card[3]][card[4]]);
        
        return 0;
    }
  • 相关阅读:
    SpringDataJpa
    #pragma pack(n)的使用
    jquery中的ajax方法参数
    rapidjson的使用
    Linux下Qt安装
    jsoncpp 0.5 ARM移植
    GoAhead2.5移植到ARM教程
    Qt 4.7.2移植到ARM教程
    虚函数与纯虚函数的区别
    海康、大华IpCamera RTSP地址和格式
  • 原文地址:https://www.cnblogs.com/xiaoyezi-wink/p/11151187.html
Copyright © 2020-2023  润新知