题目:P1541 乌龟棋

感谢大神的题解(他的写的特别好)

写一下我对他的代码的理解吧(哎,蒟蒻就这能这样...)

代码:

#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll num[350+100];
ll p[5];
ll f[41][41][41][41];
int main()
{
    ios::sync_with_stdio(false);
    ll n,m;//n格子数,m牌数
    cin>>n>>m;
    for(ll i=1;i<=n;i++)
        cin>>num[i];
    ll x;
    for(ll i=1;i<=m;i++)
        cin>>x,p[x]++;//偷懒用逗号隔开

    f[0][0][0][0]=num[1];
    for(ll a=0;a<=p[1];a++)
        for(ll b=0;b<=p[2];b++)
            for(ll c=0;c<=p[3];c++)
                for(ll d=0;d<=p[4];d++)
                {
                    ll r=1+1*a+2*b+3*c+4*d;
                    if(a>=1) f[a][b][c][d]=max(f[a][b][c][d],f[a-1][b][c][d]+num[r]);//如果有牌出
                    if(b>=1) f[a][b][c][d]=max(f[a][b][c][d],f[a][b-1][c][d]+num[r]);
                    if(c>=1) f[a][b][c][d]=max(f[a][b][c][d],f[a][b][c-1][d]+num[r]);
                    if(d>=1) f[a][b][c][d]=max(f[a][b][c][d],f[a][b][c][d-1]+num[r]);
                }
    cout<<f[p[1]][p[2]][p[3]][p[4]]<<endl;
}
点击加号展开代码

相关文章:

  • 2020-11-07
  • 2020-01-21
  • 2022-01-12
  • 2021-05-30
  • 2022-01-05
  • 2021-06-10
猜你喜欢
  • 2021-07-22
  • 2022-01-07
  • 2022-12-23
  • 2022-02-15
  • 2022-12-23
  • 2021-11-02
  • 2021-12-25
相关资源
相似解决方案