• 乌龟棋


                                                                                                                                                                                                         这里是题目呀

    题意:给n个格子,每个格子有一个对应的分数

       给m张牌 每张牌上有对应的步数

               tortoise从第一个格子出发

         每次使用一张牌 前进的步数为牌上的数字

         每到一格 把格子上的数字加入分数

         求最大的分数  

    主要思路:要抓住题目里说的 牌的种数是有限的

                       只有4种

                       用每种牌使用了多少来做状态

    #include<iostream>
    #include<cstdio>
    #define go(i,u,v) for(register int i=u;i<=v;i++)
    using namespace std;
    int read()
    {
      int x=0,y=1;char c=getchar();
      while(c<'0'||c>'9') {if(c=='-') y=-1;c=getchar();}
      while(c>='0'&&c<='9') {x=(x<<3)+(x<<1)+c-'0';c=getchar();}
      return x*y;
    }
    int n,m,cd[5],sc[360],f[50][50][50][50];
    int main()
    {
      n=read();m=read();
      go(i,1,n) sc[i]=read();
      go(i,1,m) {int x=read();cd[x]++;}
      f[0][0][0][0]=sc[1];
      go(a,0,cd[1]) go(b,0,cd[2])
      go(c,0,cd[3]) go(d,0,cd[4]){
        int x=a*1+b*2+c*3+d*4+1;
        if(a>0) f[a][b][c][d]=max(f[a][b][c][d],f[a-1][b][c][d]+sc[x]);
        if(b>0) f[a][b][c][d]=max(f[a][b][c][d],f[a][b-1][c][d]+sc[x]);
        if(c>0) f[a][b][c][d]=max(f[a][b][c][d],f[a][b][c-1][d]+sc[x]);
        if(d>0) f[a][b][c][d]=max(f[a][b][c][d],f[a][b][c][d-1]+sc[x]);
      }
      printf("%d",f[cd[1]][cd[2]][cd[3]][cd[4]]);
      return 0;
    }
    View Code
    光伴随的阴影
  • 相关阅读:
    axios 讲解 和vue搭建使用
    在过去一年中做了很多项目。纪念一下
    使用vue遇到坑
    python 学习总结
    webpack 学习
    gulp-rev 添加版本号
    解决微信转发到朋友圈没有获取页面头像以图标展示。
    对象-数组-字符串:
    mobiscroll时间控件
    Chrome Adobe flash player已过期怎么办
  • 原文地址:https://www.cnblogs.com/forward777/p/10305740.html
Copyright © 2020-2023  润新知