首页 > 其他分享 >题解:P11248 [GESP202409 七级] 矩阵移动

题解:P11248 [GESP202409 七级] 矩阵移动

时间:2024-11-07 13:17:42浏览次数:3  
标签:GESP202409 int 题解 si dp P11248 max 502 dpi

题目传送门

题目大意

给出一个 n n n 行 m m m 列的只包含 01? 的矩阵,你可以选择至多 x x x 个 ? 改成 1

设得分为经过的 1 的数量,求从矩阵的 ( 1 , 1 ) (1,1) (1,1) 开始,每次只能向右或向下移动,走到 ( n , m ) (n,m) (n,m) 的最大得分为多少?

思路讲解

很容易想到动态规划。

设 d p i , j , k dp_{i,j,k} dpi,j,k​ 为从 ( 1 , 1 ) (1,1) (1,1) 走到 ( i , j ) (i,j) (i,j),修改路径上 k k k 个 ?1 的最大得分, s i , j s_{i,j} si,j​ 为第 i i i 行 j j j 列的字符。

我们遍历 i , j , k i,j,k i,j,k,如果 s i , j s_{i,j} si,j​ 为 ?,且 k > 0 k>0 k>0,则 d p i , j , k = max ⁡ ( max ⁡ ( d p i − 1 , j , k , d p i , j − 1 , k ) , 1 + max ⁡ ( d p i − 1 , j , k − 1 , d p i , j − 1 , k − 1 ) ) dp_{i,j,k}=\max(\max(dp_{i-1,j,k},dp_{i,j-1,k}),1+\max(dp_{i-1,j,k-1},dp_{i,j-1,k-1})) dpi,j,k​=max(max(dpi−1,j,k​,dpi,j−1,k​),1+max(dpi−1,j,k−1​,dpi,j−1,k−1​)),即我们改或者不改 s i , j s_{i,j} si,j​。

否则 d p i , j , k = [ s i , j = 1 ] + max ⁡ ( d p i − 1 , j , k , d p i , j − 1 , k ) dp_{i,j,k}=[s_{i,j}=1]+\max(dp_{i-1,j,k},dp_{i,j-1,k}) dpi,j,k​=[si,j​=1]+max(dpi−1,j,k​,dpi,j−1,k​)

最终答案为 max ⁡ i = 0 i ≤ x ( d p n , m , i ) \max\limits_{i=0}^{i\le x}(dp_{n,m,i}) i=0maxi≤x​(dpn,m,i​)。

代码实现

#include <bits/stdc++.h>
using namespace std;
int t,n,m,x,dp[502][502][302];
string s[502];
int main(){
    scanf("%d",&t);
    while(t--){
        scanf("%d%d%d",&n,&m,&x);
        for(int i=1;i<=n;i++){
            cin>>s[i];
            s[i]=" "+s[i];
        }
        memset(dp,0,sizeof(dp));//不要忘了初始化
        for(int i=1;i<=n;i++)
            for(int j=1;j<=m;j++)
                for(int k=0;k<=x;k++){
                    dp[i][j][k]=(s[i][j]=='1')+max(dp[i-1][j][k],dp[i][j-1][k]);//先考虑不改变 s[i][j] 的情况
                    if(k>0 && s[i][j]=='?')
                        dp[i][j][k]=max(dp[i][j][k],1+max(dp[i-1][j][k-1],dp[i][j-1][k-1]));//考虑改变 s[i][j] 的情况
                }
        int ans=0;
        for(int i=0;i<=x;i++)
            ans=max(ans,dp[n][m][i]);//求最大值
        printf("%d\n",ans);
    }
    return 0;
}

标签:GESP202409,int,题解,si,dp,P11248,max,502,dpi
From: https://blog.csdn.net/andycode_/article/details/143591424

相关文章

  • 【记录】Cordial Sync具身智能协作源码复现及问题解决
    论文简要总结智能体需要合作将家具移动到客厅的指定位置。这个任务与现有的任务不同,它要求智能体在每个时间步都必须进行协调。模型部分1.SYNC-policies(SynchronizeYourActionsCoherently)为了解决智能体在每个时间步都需要协调的问题,研究者提出了SYNC-policies。这......
  • AtCoder Beginner Contest 284题解
    AtCoderBeginnerContest284A没有什么难点,反着输出一遍就可以了。#include<bits/stdc++.h>usingnamespacestd;stringa[2000];intmain(){ intn; cin>>n; for(inti=1;i<=n;i++)cin>>a[i]; for(inti=n;i;i--)cout<<a[i]<<'\n';......
  • 题解:HDU5628 Clarke and math
    数学题可爱捏~HintAnalysis注意到形式很好看,猜测是某种神奇迭代。考虑特殊情况\(k=1\),于是有:\(g(i)=\sum_{i_1\midi}f(i_1)=(f*1)(i)\)$即\(g=f*1\)。于是猜测\(g=f*1^k\),这里的幂运算表示多次Dirichlet卷积。简单证明一下,采用数学归纳法:基本情况\(k=1\),已经证过,......
  • CF 1438 题解
    CF1438题解ASpecificTastesofAndre考虑一种非常简单的构造:\(a_i=1\).不难发现满足条件.BValeriiAgainstEveryone结论:符合条件当且仅当有两个一样的元素.证明:充分性显然,下证必要性.若不存在两个一样的元素,则由于无法进位,故没有办法得到两个区间和在相......
  • 【考试题解】NOIP2024加赛2
    目录A.新的阶乘(factorial)题目内容部分分?pts正解思路代码B.博弈树(tree)题目内容部分分80pts正解思路代码C.划分(divide)题目内容部分分10pts14pts正解思路代码D.灯笼(lantern)A.新的阶乘(factorial)题目内容定义运算\(f(x)=x^1\times(x-1)^2\times(x-2)^3\dots2^{x-1......
  • CF2001 题解
    A给定循环数组,每次操作时,设当前大小为m。选择$i\in[0,m)$,若满足$a_i\lea_{i+1\bmodm}$,则可删除$a_i,a_{i+1\bmodm}$中的任意一个。求最小的操作次数,使得数组中所有元素都相等。$n\le100$操作非常强,除了两个相邻位置相等的情况,可以删除任意元素。然而所有位置都......
  • 暂存的题解
    P4011孤岛营救问题感觉其实我能想出来,但是对难题产生了恐惧,直接看题解了,确实简单,很抱歉浪费了一道题。数据范围很小,搜索bfs,钥匙直接状态压缩,找到答案立即返回,否则就无解。我们要彻底的分析问题,为什么我想不到,以后我要怎么总结,首先看到题之后要先看数据范围,看到数据范围非常小......
  • [USACO22JAN] Minimizing Haybales P 题解
    [USACO22JAN]MinimizingHaybalesP随机化?五分。显然对于任意\(a_i,a_j\),若\(|a_i-a_j|>K\),则这两堆草的先后顺序永远不会改变。所以易得暴力:对于所有这样的\(i,j\),不妨设\(i<j\),则连一条\(i\toj\)的边,答案就是这个图字典序最小的拓扑排序,优先队列即可。voidtoposort(......
  • [USACO21DEC] Tickets P 题解
    [USACO21DEC]TicketsP首先我们思考暴力的\(O(n^2)\)怎么做。显然比起每次以\(i\)为起点跑\(n\)遍最短路,建反图后分别以\(1\)和\(n\)为起点跑两遍最短路是更加经济的方式。然后你可能会以为\(\text{dis}(1,i)+\text{dis}(n,i)\)就是答案了,之后你就会发现连样例都过......
  • 【问题解决】java.lang.SecurityException: JCE cannot authenticate the provider BC
    问题复现历史项目升级JDK(由1.7升级到8),进行加密/解密时出现报错java.lang.SecurityException:JCEcannotauthenticatetheproviderBC。问题原因Wikipa上查到JCE的描述如下:JavaCryptographyExtension(JCE)isanofficiallyreleasedStandardExtensiontotheJavaPl......