首页 > 其他分享 >洛谷P1373:小 a 和 uim 之大逃离

洛谷P1373:小 a 和 uim 之大逃离

时间:2024-10-14 18:49:23浏览次数:6  
标签:P1373 洛谷 int uim dp 805

洛谷P1373:小 a 和 uim 之大逃离

题意

思路

DP:记 dp[i][j][c][0/1] 表示走到 \(i\) 行 \(j\) 列时,两人容量之差为 \(c\) 的方案数,\(0\) 表示 \(\rm 小a\) 走的最后一步,\(1\) 表示 \(\rm uim\) 走的最后一步。

容易得出转移方程:

dp[i][j][l][0]+=dp[i-1][j][l-a[i][j]+k][1];
dp[i][j][l][0]+=dp[i][j-1][l-a[i][j]+k][1];
dp[i][j][l][1]+=dp[i-1][j][l+a[i][j]+k][0];
dp[i][j][l][1]+=dp[i][j-1][l+a[i][j]+k][0];

Code

#include<bits/stdc++.h>
using namespace std;
int n,m,k;
int dp[805][805][20][2];
int a[805][805];
const int mod=1e9+7;
int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);cout.tie(0);
    cin>>n>>m>>k;
    k++;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
            cin>>a[i][j],dp[i][j][a[i][j]%k][0]=1;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
            for(int l=0;l<=k;l++)
            {
                dp[i][j][l][0]+=dp[i-1][j][(l-a[i][j]+k)%k][1];
                dp[i][j][l][0]+=dp[i][j-1][(l-a[i][j]+k)%k][1];
                dp[i][j][l][1]+=dp[i-1][j][(l+a[i][j]+k)%k][0];
                dp[i][j][l][1]+=dp[i][j-1][(l+a[i][j]+k)%k][0];
                dp[i][j][l][0]%=mod;
                dp[i][j][l][1]%=mod;
            }
    int ans=0;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
            ans+=dp[i][j][0][1],ans%=mod;
    cout<<ans;
    return 0;
}

标签:P1373,洛谷,int,uim,dp,805
From: https://www.cnblogs.com/GCSG01/p/18464768

相关文章

  • 洛谷题单指南-字符串-P5283 [十二省联考 2019] 异或粽子
    原题链接:https://www.luogu.com.cn/problem/P5283题意解读:n个整数,每次从从取l~r的数进行异或得到美味值,一共取k次,并计算这k个美味值之和的最大值。解题思路:1、如何O(1)的计算l~r数的异或,得到美味值可以借助前缀和思想,a[i]为第i个数,s[i]表示a[1]~a[i]每个数的异或值,要计算l~r的......
  • 洛谷学习总集2
    洛谷代码学习总集2目录索引P1067输出多项式的字符串P1098将切片展开成完整字符串P1067输出多项式的字符串思路:多项式由:系数,"x",""指数,组成。其中各项多项式间由"+"连接,如果系数/指数为1则不需要打印系数/""指数。特殊情况:读入1、末两项(指数为1和指数为0)针对......
  • 洛谷 P2071 座位安排题解
    因为一个人坐一个座位很像二分图,题意转化为二分图最大匹配。把人放在左部,把座位放在右部,一排座位占右部的两个点。假设人想要坐在\(x\)排,那么建图的时候就可以将这个人连向\(2x\)和\(2x+1\)。这样一排就对应着两个人了。由于\(n\le4000\),直接由朴素的\(O(nm)\)的匈牙利......
  • 01背包问题/Ieee全球极限编程大赛11.0题BeetleBag题解/洛谷P1926 小书童——刷题大军
    基础01背包问题概述给出一个容积为V的背包,有i个物体,每个物体都有自己的体积和价值,用Vi和Wi表示,要将这些物体装进背包里面,问怎样才能使得装入物体的总价值最大?最大为多少?解决思路1.如果你没能正确理解这道题,尤其是对于很多新手,第一反应可能是将所有物体的单位价值算出来,然后......
  • 洛谷P8818 [CSP-S 2022] 策略游戏
    Problem给出两个数组A,B,进行q次询问,每次分别给出这两个数组的某个区间l1,r1,l2,r2,也就是\(A_{l1\simr1}\)与\(B_{l2\simr2}\),有两位同学小L和小Q分别从A,B的以上区间中选一个数,而两数乘积为此次操作的分数,小L希望分数大,小Q希望分数小,请问他们每次以最优策略进行游戏,分数将会......
  • 洛谷P1102 A-B数对
    A-B数对题目背景出题是一件痛苦的事情!相同的题目看多了也会有审美疲劳,于是我舍弃了大家所熟悉的A+BProblem,改用A-B了哈哈!题目描述给出一串正整数数列以及一个正整数\(C\),要求计算出所有满足\(A-B=C\)的数对的个数(不同位置的数字一样的数对算不同的数对)。输入格......
  • 洛谷P6492
    题意:对一个点进行修改,然后进行查询符合条件的子串。思路:单点修改+查询,很容易想到线段树,用线段树来存,考虑每一次修改后进行合并,然后看能不能合并于是用3个数组来表示,分别表示该节点编号下的区间内最长的01串的前后缀的长度。点击查看代码#include<iostream>#include<stack>#i......
  • 洛谷P3375
    kmp算法:扫描字符串A,并且更新可以匹配到B的什么位置。时间复杂度O(n)。P[i]表示当前模式串在该位置匹配冲突时,应该将模式串的哪一位与此对齐。总之就是扫描字符串A,并更新2可以匹配到什么位置点击查看代码#include<bits/stdc++.h>#defineiosios::sync_with_stdio(false);c......
  • 洛谷P10387 [蓝桥杯 2024 省 A] 训练士兵
    洛谷P10387[蓝桥杯2024省A]训练士兵1.Mysolution#include<stdio.h>#include<algorithm>#include<cmath>#include<iostream>#include<set>#include<string>#defineFor(i,j,n)for(inti=j;i<=n;++i)template&l......
  • 洛谷P2224产品加工(DP)
    [HNOI2001]产品加工题目描述某加工厂有A、B两台机器,来加工的产品可以由其中任何一台机器完成,或者两台机器共同完成。由于受到机器性能和产品特性的限制,不同的机器加工同一产品所需的时间会不同,若同时由两台机器共同进行加工,所完成任务又会不同。某一天,加工厂接到\(n\)个......