BZOJ 4742 DP
2024-08-31 04:57:35
思路:
Claris大大说了
排序以后 这个可以看成是括号序列
f[i][j][k]表示到了i j个左括号 k个右括号
(f[i][j][k]+=f[i-1][j][k])%=p;
if(node[i].id)(f[i][j][k+1]+=f[i-1][j][k])%=p;
else (f[i][j+1][k]+=f[i-1][j][k])%=p;
//By SiriusRen
#include <cstdio>
#include <algorithm>
using namespace std;
int n,m,K,a[],b[],f[][][],top,p=;
struct Node{int wei,id;Node(){}Node(int x,int y){wei=x,id=y;}}node[];
bool cmp(Node x,Node y){if(x.wei!=y.wei)return x.wei<y.wei;return x.id>y.id;}
int main(){
scanf("%d%d%d",&n,&m,&K);
for(int i=;i<=n;i++)scanf("%d",&a[i]),node[++top]=Node(a[i],);//FJ
for(int i=;i<=m;i++)scanf("%d",&b[i]),node[++top]=Node(b[i],);//FP
sort(node+,node++top,cmp);
f[][][]=;
for(int i=;i<=top;i++)
for(int j=;j<=K;j++)
for(int k=;k<=K;k++)
if(j>=k){
(f[i][j][k]+=f[i-][j][k])%=p;
if(node[i].id)(f[i][j][k+]+=f[i-][j][k])%=p;
else (f[i][j+][k]+=f[i-][j][k])%=p;
}
printf("%d\n",f[top][K][K]);
}
最新文章
- php Your system does not support any of these drivers: gmagick,imagick,gd2
- 关于ActiveMQ的几种集群配置
- 使用wait()与notify()实现线程间协作
- jquery简单原则器(匹配第一个元素)
- ThinkCMF-幻灯片制作
- 在同一个机器中安装LoadRunner与QTP
- *** 安全沙箱冲突 *** 到 127.0.0.1:9999 的连接已停止 - 不允许从 file:///E:/flash/Flash/Vod/tag/Letvcloud__MainVodNew/bin-debug/Player.swf 进行连接
- linux命令(2):df 磁盘占用
- How to Convert a Date Time to “X minutes ago” in C# z
- C#实现调用Java类中方法
- Android应用开发学习之表格视图
- How to read video frames in hadoop?如何在Hadoop中读取视频帧?
- USACO6.5-Closed Fences:计算几何
- No DEFAULT or UI configuration directive found!
- 7.PHP 教程_PHP常量
- Python脚本:获取股票信息
- http协议报头信息和主体鉴别
- Windows 安装 python2.7
- 简述“类(class)”,“类库(class library)”,“包(package)”,“jar文件”这四个概念间的关系
- (NO.00005)iOS实现炸弹人游戏(二):素材选择的取舍