博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[BZOJ 1566] 管道取珠
阅读量:4510 次
发布时间:2019-06-08

本文共 752 字,大约阅读时间需要 2 分钟。

Link:https://www.lydsy.com/JudgeOnline/problem.php?id=1566

 

Solution:

思路十分精奇的一道题目

 

题目要求的是$\sum_{i=1}^k a_i^2$

明显发现$a_i$是难以求解的,于是考虑如何整体处理$a_i^2$

 

由于$a_i^2=a_i*a_i$, 

因此$a_i^2$可以认为是第一人选出的方案数$a_i$乘上第二人选出的方案数$a_i$

那么只要统计两人选择相同序列的情况数即可

 

设dp[i][j][k]为取i个字符,两人在上方取到j,k个字符时相同的方案数

接下来再用滚动数组优化下转移就好了

 

Code:

//by NewErA#include 
using namespace std;const int MOD=1024523; const int MAXN=510;int n,m,dp[2][MAXN][MAXN],up[MAXN],down[MAXN],t=0;char s1[MAXN],s2[MAXN]; int main(){ scanf("%d%d",&n,&m); scanf("%s",s1);scanf("%s",s2); for (int i=0;i

 

Review:

1、如果要求解某难以求解之数的多次幂时,

考虑将多次幂转化为降次的其它问题求解

(二次幂转化为两个一次问题的结果相乘)

 

2、对DP的优化:

如果为同时求解两个同样问题的DP,维护步数和即可,由$O(n^4)$降到$O(n^3)$

 

如果每次只用到上一层结果,使用滚动数组优化空间

转载于:https://www.cnblogs.com/newera/p/9107084.html

你可能感兴趣的文章
Junit问题01 利用 @Autowired 注入失效问题
查看>>
连通块
查看>>
servlet.txt笔记
查看>>
jquery设置select选中
查看>>
今天说一下DML触发器的顺序
查看>>
Memcached学习(一)--网络模型
查看>>
FragmentTransaction add 和 replace 区别 转
查看>>
jQuery 效果方法
查看>>
STM32物联网通信WIFI
查看>>
java反射案例详解
查看>>
MAGENTO 与 reindexer
查看>>
数字,字符串,列表及其内置方法
查看>>
iOS遍历数组的同时删除元素
查看>>
小强的HTML5移动开发之路(16)——神奇的拖放功能
查看>>
zookeeper FastLeaderElection
查看>>
Jquery AJAX如何使用Promise/Deferred实现顺序执行?
查看>>
进度条
查看>>
maven 常用命令
查看>>
用户画像
查看>>
HTTP报文(面试会问开发时常用的报文头格式)
查看>>