首页 > 其他分享 >[NOIP2010 提高组] 乌龟棋

[NOIP2010 提高组] 乌龟棋

时间:2023-05-28 16:56:15浏览次数:36  
标签:卡片 NOIP2010 int max 提高 41 四种 乌龟 dp

题目大意

有四种卡片,它们分别可以让你前进1格,2格,3格和4格.在前进的道路上到达每个格子都会得到对应的积分.现在分别给出四种卡片的数量,求用完所有卡片能获得的最大积分和

思路

由于卡片只有4种,且每种的数量不超过20张,所以想到开四维dp,用dp[i][j][k][z]来表示用掉i张卡片4,j张卡片3,k张卡片2,z张卡片1时能获得的最大积分和.状态转移方程为:

dp[i][j][k][z] = max(dp[i][j][k][z],dp[i - 1][j][k][z]+a[t]);
dp[i][j][k][z] = max(dp[i][j][k][z], dp[i][j-1][k][z]+a[t]);
dp[i][j][k][z] = max(dp[i][j][k][z], dp[i][j][k-1][z]+a[t]);
dp[i][j][k][z] = max(dp[i][j][k][z], dp[i][j][k][z - 1] + a[t]);

代码如下:

#include <bits/stdc++.h>
#include<algorithm>
using namespace std;
#define ll long long
#define N 356
int dp[41][41][41][41];
int a[N],b[5];
int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    int n, m,x; cin >> n >> m;
    for (int i = 1; i <= n; i++)cin >> a[i];
    for (int i = 1; i <= m; i++) {
        cin >> x;
        //分别统计四种卡片的数目
        b[x]++;
    }
    int t;
    //在第一格的分数
    dp[0][0][0][0]=a[1];
    for (int i = 0; i <= b[4]; i++) {
        for (int j = 0; j <= b[3]; j++) {
            for (int k = 0; k <= b[2]; k++) {
                for (int z = 0; z <= b[1]; z++) {
                    //用t来表示到达第几格
                    t = 1+i*4 + j*3 + k*2 + z;
                    if (i)dp[i][j][k][z] = max(dp[i][j][k][z],dp[i - 1][j][k][z]+a[t]);
                    if(j)dp[i][j][k][z] = max(dp[i][j][k][z], dp[i][j-1][k][z]+a[t]);
                    if (k)dp[i][j][k][z] = max(dp[i][j][k][z], dp[i][j][k-1][z]+a[t]);
                    if(z)dp[i][j][k][z] = max(dp[i][j][k][z], dp[i][j][k][z - 1] + a[t]);
                }
            }
        }
    }
    cout << dp[b[4]][b[3]][b[2]][b[1]];
    return 0;
}

标签:卡片,NOIP2010,int,max,提高,41,四种,乌龟,dp
From: https://www.cnblogs.com/markun0/p/17438477.html

相关文章

  • 常用提高图片质量的正反提示词
    正向:bestquality,最高质量masterpiece,精品ultrahighres,高分辨率photorealistic, 照片真实感反向:worstquality,最差质量lowquality,差质量normalquality,一般质量lowres,低分辨率badanatomy,差的身体结构,作用于人像ba......
  • CMake构建指南:如何提高C/C++项目的可维护性
    如果您是一位C/C++开发人员,那么您一定知道在编写和维护大型项目时所面临的挑战。这些项目通常包含大量的源代码、库和依赖项,需要耗费大量的时间和精力才能构建和维护。在这种情况下,使用自动化工具可以大大减轻您的负担,提高项目的可维护性。CMake就是这样一款工具,它可以自动化C/C+......
  • CMake构建指南:如何提高C/C++项目的可维护性
    如果您是一位C/C++开发人员,那么您一定知道在编写和维护大型项目时所面临的挑战。这些项目通常包含大量的源代码、库和依赖项,需要耗费大量的时间和精力才能构建和维护。在这种情况下,使用自动化工具可以大大减轻您的负担,提高项目的可维护性。CMake就是这样一款工具,它可以自动化C/C++......
  • 提高linux对最大进程数和最大打开文件描述符数的限制
    打开/etc/security/limits.conf文件在下面加入如下两行,其中wacos是用户名,*可以代表所有用户wacos     -   nproc     20000wacos     -   nofile     65536noproc代表最大进程数nofile代表最大文件打开数然后在命令行输......
  • Doo Prime 德璞资本:选对期货交易公司,提高交易效率
    在现代经济社会中,期货市场逐渐受到投资者的青睐。越来越多的人通过期货交易来获取财富,实现自己的金融目标。而在进行期货交易时,选择一个靠谱的期货交易公司是至关重要的。本文将详细介绍如何选对期货交易公司,提高交易效率,让广大投资者在期货市场中获得更大的利益。第一,选择信誉良好......
  • 怎么提高小程序注册量
    要提高小程序注册量,可以考虑以下几个方面:简化注册流程:优化注册流程,减少用户填写信息的步骤和难度,提高注册完成的便捷性和速度。引入社交登录:可以将微信登录、QQ登录等社交账号作为小程序的注册方式,提高用户注册的便捷性。免费试用:提供免费试用的机会,吸引用户注册并试用小程序,体验小......
  • P1849 乌龟棋
    #include<bits/stdc++.h>usingnamespacestd;intn,m,a[351],r[5],dp[41][41][41][41];#definegetchar()(p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++)charbuf[1<<21],*p1=buf,*p2......
  • CMake常用命令大全:提高项目构建效率
    CMake是一个跨平台、开源的构建工具,它可以自动生成Makefile或者VisualStudio等IDE的工程文件。它能够帮助开发者更方便地管理项目的构建过程,提高项目构建的效率。在本文中,我们将介绍CMake常用的命令以及对应的用法add_executableadd_executable命令用于将多个源文件编译成可......
  • CMake常用命令大全:提高项目构建效率
    CMake是一个跨平台、开源的构建工具,它可以自动生成Makefile或者VisualStudio等IDE的工程文件。它能够帮助开发者更方便地管理项目的构建过程,提高项目构建的效率。在本文中,我们将介绍CMake常用的命令以及对应的用法add_executableadd_executable命令用于将多个源文件编译成可......
  • 如何提高gpt回答问题的精准度
    颇富观察力的小伙伴或许会发现gpt在回答问题的时候回答到一半就开始胡诌了。还有的情况,尽管是扭曲事实,他也会给你编造出来。那么如何解决呢?提供明确的问题:当您提供清晰、明确的问题时,gpt可以更好地理解您的意图,并给出更加精准的答案。提供充分的上下文:如果您在提问时提供了足够的上......