龙岗大运做网站的公司,网站建设主要工作内容,珠海市官网网站建设价格,定制v软件下载bzoj 1556 点这里打开题目 题目是求 a^2 求和#xff1b; 原问题可以转化为#xff1a;两个人在玩这个东西#xff0c;问这两个人弄出来的序列相同的有多少种情况#xff0c;操作方式不同即为一种不同的情况。 就这个问题#xff0c;参考大佬的DP思想。 DP[t][i][j] 分别…bzoj 1556 点这里打开题目 题目是求 a^2 求和 原问题可以转化为两个人在玩这个东西问这两个人弄出来的序列相同的有多少种情况操作方式不同即为一种不同的情况。 就这个问题参考大佬的DP思想。 DP[t][i][j] 分别表示 两人同时第t次取小球第一人在上面管道取了i个第二个人在上面管道取了j个所出现相同情况的个数 我们假设某一个状态为 DP[t][i][j] 。当第一人取得球和第二个人取得球颜色相同时那么下一个状态就可以从当前状态转过去 所以很容易得到状态转移为每个人都可以取上面和下面的组合一样四个情况判断球颜色是否一样转移。 注意自己写的时候看清下标。 This is code #include iostream
#include string.h
#include string
#include algorithm
#include math.h
#include queue
#include stdlib.h
#include stdio.husing namespace std;
typedef long long int LL;
const int maxn510;
char a[maxn],b[maxn];
int dp[2][maxn][maxn];
const int MOD1024523;
int main()
{int n,m;scanf(%d%d,n,m);scanf(%s%s,a,b);dp[0][0][0]1;for(int t0;tnm;t){int gdt%2;for(int i0;init;i)for(int j0;jnjt;j){if(t-im||t-jm) continue;if(a[i]a[j]) (dp[!gd][i1][j1]dp[gd][i][j])%MOD;if(a[i]b[t-j]) (dp[!gd][i1][j]dp[gd][i][j])%MOD;if(b[t-i]a[j]) (dp[!gd][i][j1]dp[gd][i][j])%MOD;if(b[t-i]b[t-j]) (dp[!gd][i][j]dp[gd][i][j])%MOD;dp[gd][i][j]0;}}printf(%d\n,dp[(mn)%2][n][n]);return 0;
} 转载于:https://www.cnblogs.com/coded-ream/p/7207914.html