2019 hdu多校1
A:一类线性dp,时间卡的有点紧
/*
定义 dp[t][i][j][k]代表填完前 t 个位置后,{0, 1, 2, 3} 这 4 个数字最后一次出现的位置,
排序后为 t, i, j, k(t > i > j > k) 的方案数目,则按照第 t 位的数字的四种选择,可以得
到四种转移。
t选t-1这个位置的数:dp[t][i][j][k]
t选i这个位置的数:dp[t][t-1][j][k]
t选j这个位置的数:dp[t][t-1][i][k]
t选k这个位置的数:dp[t][t-1][i][j]
枚举r[l]==t+1的所有条件,当且仅当满足所有条件时才进行转移 最后的方案数=sum{dp[n]}
总时间复杂度 O(n4)。滚动一维,空间复杂度 O(n3)
*/
#include<bits/stdc++.h>
using namespace std;
#define maxn 110
#define ll long long
#define mod 998244353
ll dp[][maxn][maxn][maxn];
int n,m;
struct Node{
int l,x;
Node(){}
Node(int l,int x):l(l),x(x){}
};
vector<Node>v[maxn]; inline void update(ll &a,ll b){
a=(a+b);
while(a>=mod)a-=mod;
}
int c;
void solve(){
c=;
dp[c][][][]=;
for(int t=;t<=n;t++){
c^=;
for(int i=;i<=t;i++)
for(int j=;j<=i;j++)
for(int k=;k<=j;k++)
dp[c][i][j][k]=; for(int i=;i<t;i++)
for(int j=;j<=i;j++)
for(int k=;k<=j;k++){
update(dp[c][i][j][k],dp[c^][i][j][k]);
update(dp[c][t-][j][k],dp[c^][i][j][k]);
update(dp[c][t-][i][k],dp[c^][i][j][k]);
update(dp[c][t-][i][j],dp[c^][i][j][k]);
}
for(int p=;p<v[t].size();p++){//枚举每个条件
int l=v[t][p].l,x=v[t][p].x;
for(int i=;i<t;i++)
for(int j=;j<=i;j++)
for(int k=;k<=j;k++){
int cnt=;
if(i>=l)cnt++;
if(j>=l)cnt++;
if(k>=l)cnt++;
if(cnt!=x)dp[c][i][j][k]=;
}
}
}
} int main(){
//ios::sync_with_stdio(false);
int t;cin>>t;
while(t--){
for(int i=;i<maxn;i++)v[i].clear(); scanf("%d%d",&n,&m);
for(int i=;i<=m;i++){
int l,r,x;
scanf("%d%d%d",&l,&r,&x);
v[r].push_back(Node(l,x));
}
solve();
ll ans=;
for(int i=;i<n;i++)
for(int j=;j<=i;j++)
for(int k=;k<=j;k++)
ans+=dp[c][i][j][k],ans%=mod;
cout<<ans<<'\n';
}
}
B:线性基前缀和,cf原题
C:待补
D:模拟,二分也可以做
E:队友过得,最短路最小割
F,G,H待补
I:字符串dp,调了半天才做出来
#include<bits/stdc++.h>
using namespace std;
#define maxn 300005
int cnt[maxn][],nxt[maxn][],pos[];
int n,k,l[],r[],used[],up,down;
char ans[maxn],s[maxn];
int judge(int i,int pos){
int res1=,res2;
for(int j=;j<;j++){
if(used[j]+cnt[pos][j] < l[j])return ;
res1+=max(,l[j]-used[j]);//后面最少要的字符个数
res2+=min(cnt[pos][j],r[j]-used[j]);//后面最多能的字符个数
}
if(res1>k-i || res2<k-i)return ;
return ;
}
void init(){
memset(used,,sizeof used);
up=down=;
memset(cnt,,sizeof cnt);
memset(ans,,sizeof ans);
} int main(){
while(scanf("%s%d",s+,&k)==){
init();
n=strlen(s+);
for(int i=;i<;i++)scanf("%d%d",&l[i],&r[i]),up+=r[i],down+=l[i]; for(int i=n;i>=;i--){
for(int j=;j<;j++)
if(s[i]-'a'==j)cnt[i][j]=cnt[i+][j]+;
else cnt[i][j]=cnt[i+][j];
}
int flag=;
if(down>k || up<k){puts("-1");continue;}
for(int i=;i<;i++)if(cnt[][i]<l[i]){puts("-1");flag=;break;}
if(flag)continue; for(int i=;i<;i++)pos[i]=n+;
for(int i=n;i>=;i--){
for(int j=;j<;j++)
nxt[i][j]=pos[j];
pos[s[i]-'a']=i;
}
for(int j=;j<;j++)nxt[][j]=pos[j]; int now=;
for(int i=;i<=k;i++){
for(int j=;j<;j++){//第i位选择j
if(used[j]>=r[j])continue; int tmp=nxt[now][j];
used[j]++;
if(judge(i,tmp+)){
ans[i]=j;
now=tmp;
break;
}
else
used[j]--;
}
} for(int i=;i<=k;i++)cout<<(char)(ans[i]+'a');
puts("");
}
}
JKLM:待补
2019 hdu多校1的更多相关文章
- 2019 HDU 多校赛第二场 HDU 6598 Harmonious Army 构造最小割模型
题意: 有n个士兵,你可以选择让它成为战士还是法师. 有m对关系,u和v 如果同时为战士那么你可以获得a的权值 如果同时为法师,你可以获得c的权值, 如果一个为战士一个是法师,你可以获得b的权值 问你 ...
- 2018 HDU多校第四场赛后补题
2018 HDU多校第四场赛后补题 自己学校出的毒瘤场..吃枣药丸 hdu中的题号是6332 - 6343. K. Expression in Memories 题意: 判断一个简化版的算术表达式是否 ...
- 2018 HDU多校第三场赛后补题
2018 HDU多校第三场赛后补题 从易到难来写吧,其中题意有些直接摘了Claris的,数据范围是就不标了. 如果需要可以去hdu题库里找.题号是6319 - 6331. L. Visual Cube ...
- 2015 HDU 多校联赛 5363 Key Set
2015 HDU 多校联赛 5363 Key Set 题目: http://acm.hdu.edu.cn/showproblem.php? pid=5363 依据前面给出的样例,得出求解公式 fn = ...
- 2015 HDU 多校联赛 5317 RGCDQ 筛法求解
2015 HDU 多校联赛 5317 RGCDQ 筛法求解 题目 http://acm.hdu.edu.cn/showproblem.php? pid=5317 本题的数据量非常大,測试样例多.数据 ...
- [HDU多校]Ridiculous Netizens
[HDU多校]Ridiculous Netizens 点分治 分成两个部分:对某一点P,连通块经过P或不经过P. 经过P采用树形依赖背包 不经过P的部分递归计算 树型依赖背包 v点必须由其父亲u点转移 ...
- 【杂题总汇】HDU多校赛第十场 Videos
[HDU2018多校赛第十场]Videos 最后一场比赛也结束了…… +HDU传送门+ ◇ 题目 <简要翻译> 有n个人以及m部电影,每个人都有一个快乐值.每场电影都有它的开始.结束时间和 ...
- hdu多校1002 Balanced Sequence
Balanced Sequence Time Limit: / MS (Java/Others) Memory Limit: / K (Java/Others) Total Submission(s) ...
- HDU多校(Distinct Values)
Problem Description Chiaki has an array of n positive integers. You are told some facts about the ar ...
随机推荐
- web.xml中配置——配置springmvc
<servlet> <servlet-name>springmvc</servlet-name> <servlet-class>org.springfr ...
- poj 3744 矩阵快速幂+概率dp
题目大意: 输入n,代表一位童子兵要穿过一条路,路上有些地方放着n个地雷(1<=n<=10).再输入p,代表这位童子兵非常好玩,走路一蹦一跳的.每次他在 i 位置有 p 的概率走一步到 i ...
- 避免 Java 代码中的“坏味道”
1.需要 Map 的主键和取值时,应该迭代 entrySet() 当循环中只需要 Map 的主键时,迭代 keySet() 是正确的.但是,当需要主键和取值时,迭代 entrySet() 才是更高效的 ...
- EcShop二次开发学习方法和Ecshop二次开发必备基础
ecshop二次开发学习方法 近年来,随着互联网的发展,电子商务也跟着一起成长,B2B,C2C,B2C的电子商务模式也不断的成熟.这时催生出了众多电子商务相关的php开源产品.B2C方面有Ecshop ...
- 树形dp+贪心+增量法+排序——cf1241E(好题)
/* 给定一棵树,每个结点最多选和其相连的k条边,问使边权和最大的策略 dp[u][0|1]用来表示u没连父边|连了父边 时u子树下的最优解 如果u不和任意一个儿子连边,那么u下的收益是tot=sum ...
- Python_day01——变量
变量 1.声明变量 name="钱成龙" 变量定义的规则: 变量名只能是 字母.数字或下划线的任意组合 变量名的第一个字符不能是数字 关键字不能声明为变量名 2.变量类型 整 ...
- delphi 文件夹操作
文件的拖放和打开拖拽 user shellapi type TForm1 = class(TForm) ListView1: TListView; procedure FormCreate(Sende ...
- <iframe>框架标签的使用
同源下 1.iframe属性设置参考:https://blog.csdn.net/xiyiyindie/article/details/53415158 2.父子页面之间元素相互操作:https:// ...
- CentOS7编译安装MPLAYER!!!
Linux装软件就是折磨人!! Mplayer官网下好release版本 然后./configure --[options] 注意:--prefix=/usr/local/mplayer 是安装路径- ...
- centos7下的nfs配置
NFS是Network File System的缩写,即网络文件系统.客户端通过挂载的方式将NFS服务器端共享的数据目录挂载到本地目录下. nfs为什么需要RPC?因为NFS支持的功能很多,不同功能会 ...