1001 Blank

题意

有一个长度为n(n<=100)的位子,填入四种颜色,有m个限制,某个区间的颜色个数要恰好等于x个。问颜色个数的方案数。

思路

DP

四维的DP,利用滚动数组优化一维空间。

我觉得这个构造的还是比较巧妙的。四维,每一维代表每个颜色最后出现的位子。

保证(i < j < k < L),这样每次向后L增大一位,可以从i,j,k,l四种情况转移而来。

#include <bits/stdc++.h>
using namespace std;
#define pb push_back
#define fi first
#define se second
#define debug(x) cerr<<#x << " := " << x << endl;
#define bug cerr<<"-----------------------"<<endl;
#define FOR(a, b, c) for(int a = b; a <= c; ++ a) typedef long long ll;
typedef long double ld;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll; template<class T> void _R(T &x) { cin >> x; }
void _R(int &x) { scanf("%d", &x); }
void _R(ll &x) { scanf("%lld", &x); }
void _R(double &x) { scanf("%lf", &x); }
void _R(char &x) { scanf(" %c", &x); }
void _R(char *x) { scanf("%s", x); }
void R() {}
template<class T, class... U> void R(T &head, U &... tail) { _R(head); R(tail...); } template<typename T>
inline T read(T&x){
x=;int f=;char ch=getchar();
while (ch<''||ch>'') f|=(ch=='-'),ch=getchar();
while (ch>=''&&ch<='') x=x*+ch-'',ch=getchar();
return x=f?-x:x;
} const int inf = 0x3f3f3f3f;
const ll inff = 0x3f3f3f3f3f3f3f3f;
const int mod = ; /**********showtime************/ const int maxn = ;
vector<pii> v[maxn];
ll dp[maxn][maxn][maxn][];
int main(){
int T; scanf("%d", &T);
while(T--) {
int n,m;
scanf("%d%d", &n, &m);
for(int i=; i<=n; i++) v[i].clear();
for(int i=; i<=m; i++) {
int le, ri, c;
scanf("%d%d%d", &le, &ri, &c);
v[ri].pb(pii(le, c));
}
memset(dp, , sizeof(dp));
dp[][][][] = ;
ll ans = ;
int cur = ;
for(int l=; l<=n; l ++) {
for(int i=; i<=l; i++) {
for(int j=i ? i+:; j<=l; j++) {
for(int k=j?j+:; k<=l; k++ ){ for(pii p : v[l]) {
int le = p.fi, ri = l, c = p.se; if(c == ) {
if(k >= le) {dp[i][j][k][cur] = ;break;}
} else if(c == ) {
if(j >= le || k < le) {dp[i][j][k][cur] = ;break;}
}
else if(c == ) {
if(i>=le || j < le) {dp[i][j][k][cur] = ;break;}
}
else {
if(i < le) {dp[i][j][k][cur] = ;break;}
}
}
dp[j][k][l][cur^] = (dp[j][k][l][cur^] + dp[i][j][k][cur]) % mod; dp[i][k][l][cur^] = (dp[i][k][l][cur^] + dp[i][j][k][cur]) % mod; dp[i][j][l][cur^] = (dp[i][j][l][cur^] + dp[i][j][k][cur]) % mod; dp[i][j][k][cur^] = (dp[i][j][k][cur^] + dp[i][j][k][cur]) % mod;
if(l == n) ans = (ans + dp[i][j][k][cur]) % mod;
}
}
}
for(int i=; i<=l; i++)
for(int j=i ? i+:; j<=l; j++)
for(int k=j?j+:; k<=l; k++ )
dp[i][j][k][cur] = ;
cur = cur ^ ; }
printf("%lld\n", ans);
} return ;
}

1002 Operation

线性基

1003 Milk

背包

1004 Vacation

题意:

•有n(n <= 100000)辆车,依次排在一个红绿灯口,(单车道,且直行,不能超车)

•每辆车都有一个最大速度,车长,距离红绿灯线的距离。

•问最后一辆车头碰到红绿灯线的最短时间。

思路:

可以贪心做,当然二分时间也可以。赛后补了下二分的写法

#include <iostream>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;
#define pb push_back
#define fi first
#define se second
#define debug(x) cerr<<#x << " := " << x << endl;
#define bug cerr<<"-----------------------"<<endl;
#define FOR(a, b, c) for(int a = b; a <= c; ++ a) typedef long long ll;
typedef long double ld;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll; template<class T> void _R(T &x) { cin >> x; }
void _R(int &x) { scanf("%d", &x); }
void _R(ll &x) { scanf("%lld", &x); }
void _R(double &x) { scanf("%lf", &x); }
void _R(char &x) { scanf(" %c", &x); }
void _R(char *x) { scanf("%s", x); }
void R() {}
template<class T, class... U> void R(T &head, U &... tail) { _R(head); R(tail...); } template<typename T>
inline T read(T&x){
x=;int f=;char ch=getchar();
while (ch<''||ch>'') f|=(ch=='-'),ch=getchar();
while (ch>=''&&ch<='') x=x*+ch-'',ch=getchar();
return x=f?-x:x;
} const int inf = 0x3f3f3f3f;
const ll inff = 0x3f3f3f3f3f3f3f3f;
const int mod = 1e9+; /**********showtime************/ const int maxn = 1e5+;
int l[maxn],s[maxn],v[maxn];
int n; bool check(double t) {
double pos = -inff;
for(int i=n; i>=; i--) {
double tp = 1.0*s[i] - t * v[i];
pos = max(pos, tp);
if(i)pos += l[i];
}
return pos < ;
}
int main(){
while(~scanf("%d", &n)) {
for(int i=; i<=n; i++) {
scanf("%d", &l[i]);
}
for(int i=; i<=n; i++) {
scanf("%d", &s[i]);
}
for(int i=; i<=n; i++) {
scanf("%d", &v[i]);
}
double le = , ri = , res;
for(int i=; i<=; i++) {
double mid = (le + ri) / ;
if(check(mid)) ri = mid, res = mid;
else le = mid;
}
printf("%.10f\n", res);
} return ;
}

1006 Typewriter

后缀自动机

1007 Meteor

1010 Kingdom

记忆化搜索

1011 Function

化公式

1012 Sequence

ntt

1013 Code

转成凸包,或者lzh大法。

2019DX#1的更多相关文章

  1. 2019DX#10

    Solved Pro.ID Title Ratio(Accepted / Submitted)   1001 Minimum Spanning Trees 22.22%(2/9)   1002 Lin ...

  2. 2019dx#9

    Solved Pro.ID Title Ratio(Accepted / Submitted)   1001 Rikka with Quicksort 25.85%(38/147)   1002 Ri ...

  3. 2019DX#8

    Solved Pro.ID Title Ratio(Accepted / Submitted)   1001 Acesrc and Cube Hypernet 7.32%(3/41)   1002 A ...

  4. 2019dx#7

    Solved Pro.ID Title Ratio(Accepted / Submitted)   1001 A + B = C 10.48%(301/2872)   1002 Bracket Seq ...

  5. 2019DX#6

    Solved Pro.ID Title Ratio(Accepted / Submitted)   1001 Salty Fish 16.28%(7/43)  OK 1002 Nonsense Tim ...

  6. 2019DX#5

    Solved Pro.ID Title Ratio(Accepted / Submitted)   1001 fraction 辗转相除 4.17%(7/168) ok  1002 three arr ...

  7. 2019dx#4

    Solved Pro.ID Title Ratio(Accepted / Submitted)   1001 AND Minimum Spanning Tree 31.75%(1018/3206)   ...

  8. 2019DX#3

    Solved Pro.ID Title Ratio(Accepted / Submitted)   1001 Azshara's deep sea 凸包 6.67%(6/90)  

  9. 2019DX#2

    Solved Pro.ID Title Ratio(Accepted / Submitted)   1001 Another Chess Problem 8.33%(1/12)   1002 Beau ...

随机推荐

  1. 终极版Servlet——我只能提示您路过别错过

    终极版Servlet 前言:这两天看了SSM框架,本来是想往后继续学的,脑门一转又回来了,不能就这么不声不响的走了,看了这么多天的Servlet,再写最后一篇做个告别吧,这篇起名为终极版,是我现在所能 ...

  2. Skier 游戏

    # Listing_10-1.py # Copyright Warren Sande, 2009 # Released under MIT license http://www.opensource. ...

  3. 【iOS】iOS CocoaPods 整理

    github 上下载 Demo 时第一次遇到这个情况,当时有些不知所措,也没怎么在意,后来项目调整结构时正式见到了这个,并且自己去了解学习了. CocoaPods安装和使用教程 这篇文章写得很好!ma ...

  4. vagrant 创建虚拟机时遇到问题

    问题1 :  ceph-node3: Warning: Authentication failure. Retrying.. 问题分析: ssh 认证失败,在向虚拟机拷贝内容时权限不足. 解决办法: ...

  5. 洛谷P1510 题解

    前言: 其实这道题挺水的,但我居然把ta想成了 贪心 啪啪打脸 好了,废话不多说. 思路: step 1:先翻译以下题意,其实就是求出最多消耗多少体力能把东海填满,如果不能填满,就输出"Im ...

  6. CSS3:pointer-events | a标签禁用

    用纯css就能实现取消事件响应的方法,pointer-events,使用起来更加简单,它可以: pointer-events: auto | none | visiblePainted | visib ...

  7. 转载 | Sublime Text3 安装以及初次配置

    本文引自:http://blog.csdn.net/u011272513/article/details/52088800 工具:官网下载:Sublime Text3 安装:直接运行安装.http:/ ...

  8. SVN服务器更改ip地址客户端怎么设置

    SVN 服务器 IP 地址修改后,客户端对服务器的连接可以采用以下的方法重定位: 1. 如果客户端工具是TortoiseSVN,直接在工作副本上右键,选择TortoiseSVN->relocat ...

  9. 有一个时间插件引发的关于 newDate().setMonth() 的问题

    项目中遇到一个时间插件的BUG,查看源码之后发现是因为setMonth()的问题,使用了之后会某些月份会出现月份加一的问题, 查阅资料后发现  setMonth()其实是设置与当前时间天数相同的月份, ...

  10. 100天搞定机器学习|Day19-20 加州理工学院公开课:机器学习与数据挖掘

    前情回顾 机器学习100天|Day1数据预处理 100天搞定机器学习|Day2简单线性回归分析 100天搞定机器学习|Day3多元线性回归 100天搞定机器学习|Day4-6 逻辑回归 100天搞定机 ...