6654. 【2020.05.27省选模拟】数据结构
时间:2020-05-29
本文章向大家介绍6654. 【2020.05.27省选模拟】数据结构,主要包括6654. 【2020.05.27省选模拟】数据结构使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
题目
给你若干条线段,可以进行若干次操作,选择两条线段\(i\)和\(j\),满足\(R_i<L_j\),将\(j\)接到\(i\)的后面(此时必须要满足\(i\)必须后面没有接线段,\(j\)必须前面没有接线段)。
操作一定要进行到不能继续操作为止。
问最终形成的图的方案数。
\(n\leq 300\)
思考历程
首先我理解错了题意,认为只需要接出一条链……
然后知道真正的题意是读题一个小时后的事情。
u1s1,DYP坐在附近特别容易让人心态爆炸。
人家随随便便切的题,我三个钟都想不出来。
甚至开始思考人生
想到的最优的做法就是状压DP,不讲。
正解
对于一个线段,将它的左端点和右端点分开处理,其实对答案没有任何影响。
于是问题变成了:有若干个左端点和右端点,要用左边的右端点匹配右边的左端点,匹配到不能匹配为止。
然后就是个DP问题:\(f_{i,j,k}\)表示前\(i\)个点,可以选的点有\(j\)个,必须选的点有\(k\)个(当某个左端点不选时,左边的所有可选的右端点都要变为必须选)
\(O(n^3)\)
代码
using namespace std;
#include <cstdio>
#include <cstring>
#include <algorithm>
#define N 310
#define ll long long
#define mo 1000000007
int n,m;
struct DOT{
int x;
bool ty;
} d[N*2];
bool cmpd(DOT a,DOT b){return a.x<b.x || a.x==b.x && a.ty<b.ty;};
ll f[N*2][N][N];
int main(){
freopen("ds.in","r",stdin);
freopen("ds.out","w",stdout);
scanf("%d",&n);
for (int i=1;i<=n;++i){
int l,r;
scanf("%d%d",&r,&l);
d[++m]={r,1};
d[++m]={l,0};
}
sort(d+1,d+m+1,cmpd);
f[0][0][0]=1;
for (int i=0;i<m;++i)
if (d[i+1].ty==0){
for (int j=0;j<=i && j<=n;++j)
for (int k=0;k<=j;++k){
ll tmp=f[i][j][k];
if (tmp){
if (k) (f[i+1][j-1][k-1]+=(ll)tmp*k)%=mo;
if (j>k) (f[i+1][j-1][k]+=(ll)tmp*(j-k))%=mo;
(f[i+1][j][j]+=tmp)%=mo;
}
}
}
else{
for (int j=0;j<=i && j<=n;++j)
for (int k=0;k<=j;++k){
ll tmp=f[i][j][k];
if (tmp)
(f[i+1][j+1][k]+=tmp)%=mo;
}
}
ll ans=0;
for (int j=0;j<=n;++j)
(ans+=f[m][j][0])%=mo;
printf("%d\n",ans);
return 0;
}
总结
见到一些整体的对象,可以考虑一下将对象的局部分开处理。
原文地址:https://www.cnblogs.com/jz-597/p/12989660.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Python 技术篇-含中文编码的代码运行方法,(unicode error) ‘utf-8‘ codec can‘t decode问题原因及解决方法
- Spring Boot Actuators
- 用图机器学习探索 A 股个股相关性变化
- Python 技术篇-连接oracle数据库并执行sql语句实例演示,python连接oracle数据库oci详细配置方法
- MySQL 技术篇-mysql数据库的安装、配置与使用实例演示
- JavaScript 技术篇-js代码获取当前操作系统信息、浏览器版本信息实例演示,windows NT版本对照表
- Oracle 数据库impdp导入数据库版本和dmp数据库文件版本不匹配问题解决方法,ORA-39142版本号不兼容、ORA-39000转储文件说明错误解决方法
- 实践总结:基于Kbone使用React同构开发小程序
- BAT 批处理命令 - 实现输出当前文件夹下的所有文件夹名的功能实例演示
- Python+Selenium 自动化-指定chrome驱动运行selenium实例演示,运行指定位置下的浏览器驱动
- Linux 命令查找指定文件夹下符合查询条件的文件和文件夹实例演示
- 用Python实现一个最新QQ办公版(TIM)的登录界面
- Oracle 数据库直接执行本地sql文件、sql脚本实例演示
- Oracle 数据库利用回收站恢复删除的表实例演示
- Linux 命令利用scp实现从服务器共享地址上传下载文件、文件夹实例演示,scp命令的参数详解