Educational Codeforces Round 59 (Rated for Div. 2)

D. Compression

题目链接https://codeforces.com/contest/1107/problem/D

题意:

给出一个n*(n/4)的矩阵,这个矩阵原本是一些01矩阵,但是现在四个四个储存进二进制里面,现在给出的矩阵为0~9以及A~F,表示0~15。

然后问这个矩阵能否压缩为一个(n/x)*(n/x)的矩阵,满足原矩阵中大小为x*x的子矩阵所有数都相等(所有子矩阵构成整个原矩阵)。

题解:

我想的就是暴力,但题解似乎也是暴力,但题解的做法比我的做法要优美许多。我说说我的吧...

就是先看看横排能否压缩,找出所有能够压缩的v值,然后将v从大到小进行枚举,来看看列能否照样压缩,能就直接输出答案。

大体思路就是这样,但我写的代码比较复杂...其实对于将字符解码为二进制,用个二维数组就可以了...

题解的暴力就是直接几层循环枚举完事。

下面给出我的代码...

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = ;
int n;
char s[N][N];
vector <int> vec;
int main(){
scanf("%d",&n);
for(int i=;i<n;i++)
scanf("%s",s[i]);
for(int i=;i<=n;i++){
int flag=;
if(n%i!=) continue ;
for(int j=;j<n;j++){
if(strcmp(s[(j/i)*i],s[j])!=){
flag=;
break ;
}
}
if(flag) vec.push_back(i);
}
reverse(vec.begin(),vec.end());
int flag;
for(auto v:vec){
flag=;
for(int i=;i<n;i+=v){
vector <int> a;
for(int j=;j<n/;j++){
char c = s[i][j];
int now;
if(c>='A' && c<='F') now=c-'A'+;
else now=c-'';
for(int k=;k>=;k--){
if((<<k)&now) a.push_back();
else a.push_back();
}
}
for(int k=;k<n;k++){
if(a[(k/v)*v]-''!=a[k]-''){
flag=;
break ;
}
}
if(!flag) break ;
}
if(flag){
cout<<v;
return ;
}
}
return ;
}

E. Vasya and Binary String

题目链接:https://codeforces.com/contest/1107/problem/E

题意:

给出一个01串,然后对这个串进行压缩,将长度为1,2....n的相同字符进行压缩会得到相应的权值。问怎样压缩可以得到最大的值。

题解:

这题考虑dp,因为压缩只有两种情况,要么压缩一个,要么压缩多个,这个压缩多个可以连续,也可以中间有间隔。

dp(i,j,k)表示起点为i,终点为j,压缩k个和si相同的字符所得到的最大代价。

转移的话就有两种:

1.dp(i,j,1)=max{dp(i+1,j,p)}+a[1];

2.dp(i,j,k)=max{dp(i+1,pos-1,p)}+dp(pos,j,k-1)-ak-1+ak.

这里面的max我是直接枚举得到最大值,然后dp的过程中枚举pos来进行转移。

详细见代码吧:

#include <bits/stdc++.h>
#define INF 0x3f3f3f3f
using namespace std;
typedef long long ll;
const int N = ;
ll a[N];
ll dp[N][N][N];
char s[N];
int n;
int main(){
scanf("%d",&n);
scanf("%s",s+);
for(int i=;i<=n;i++) cin>>a[i];
memset(dp,,sizeof(dp));
for(int i=;i<=n;i++) dp[i][i][]=a[];
for(int i=n-;i>=;i--){
for(int j=i+;j<=n;j++){
for(int k=;k<=j-i;k++)
dp[i][j][]=max(dp[i][j][],dp[i+][j][k]+a[]);
for(int q=i+;q<=j;q++){
ll tmp=;
if(s[q]!=s[i]) continue ;
for(int p=;p<=q-i-;p++) tmp=max(tmp,dp[i+][q-][p]);
for(int k=;k<=j-i+;k++){
if(dp[q][j][k-]) dp[i][j][k]=max(dp[i][j][k],tmp+dp[q][j][k-]-a[k-]+a[k]);
}
}
}
}
ll ans = ;
for(int i=;i<=n;i++) ans=max(ans,dp[][n][i]);
cout<<ans;
return ;
}

Educational Codeforces Round 59 (Rated for Div. 2) DE题解的更多相关文章

  1. Educational Codeforces Round 48 (Rated for Div. 2) CD题解

    Educational Codeforces Round 48 (Rated for Div. 2) C. Vasya And The Mushrooms 题目链接:https://codeforce ...

  2. Educational Codeforces Round 59 (Rated for Div. 2) E 区间dp + 状态定义 + dp预处理(分步dp)

    https://codeforces.com/contest/1107/problem/E 题意 给出01字符串s(n<=100),相邻且相同的字符可以同时消去,一次性消去i个字符的分数是\(a ...

  3. C. Brutality Educational Codeforces Round 59 (Rated for Div. 2) 贪心+思维

    C. Brutality time limit per test 1 second memory limit per test 256 megabytes input standard input o ...

  4. Educational Codeforces Round 59 (Rated for Div. 2)

    熬夜爆肝,智商急剧下降 坐标UTC+8晚上23:35开始 晚上脑袋转的慢,非常慢 T1上来先做还花了好几分钟 T2本来是有式子的我TM写数位DP写炸了然后才发现是有公式 T3英语不好,一开始题意没读懂 ...

  5. 【考试记录】Educational Codeforces Round 59 (Rated for Div. 2)

    本来准备划水,结果被垃圾题艹翻了…… T2题意: 定义一个数$x$的数字根$S(x)$为:将其各位数字相加得到一个新数,再将新数的数字和相加直到得到一个个位数,就是该数的数字根. 例如:$S(38)= ...

  6. Educational Codeforces Round 59 (Rated for Div. 2) (前四题)

    A. Digits Sequence Dividing(英文速读) 练习英语速读的题,我还上来昏迷一次....只要长度大于2那么一定可以等于2那么前面大于后面就行其他no 大于2的时候分成前面1个剩下 ...

  7. Educational Codeforces Round 57 (Rated for Div. 2) ABCDEF题解

    题目总链接:https://codeforces.com/contest/1096 A. Find Divisible 题意: 给出l,r,在[l,r]里面找两个数x,y,使得y%x==0,保证有解. ...

  8. Educational Codeforces Round 54 (Rated for Div. 2) DE

    D 给出一个无向图,需要删去一些边,想知道最后能有多少个点到1的距离还是过去那么短 如果求一个最短路,然后从删边的角度看,看起来很难做,但是如果从零开始加边就会有做法,如同prim那样,先加入和1直接 ...

  9. Educational Codeforces Round 80 (Rated for Div. 2)部分题解

    A. Deadline 题目链接 题目大意 给你\(n,d\)两个数,问是否存在\(x\)使得\(x+\frac{d}{x+1}\leq n\),其中\(\frac{d}{x+1}\)向上取整. 解题 ...

随机推荐

  1. python--基本类型之字符串

    String(字符串): 定义和创建字符串: 定义:字符串是一个有序的字符的集合,用于存储和表示基本的文本信息.注意:字符串的单引号和双引号都无法取消特殊字符的含义,如果想让引号内 var1='Hel ...

  2. HBase 是什么

    Apache HBase™ is the Hadoop database, a distributed, scalable, big data store. HBase 是 Hadoop databa ...

  3. springboot2.x+maven+proguard代码混淆

    由于需要将源码打包做代码混淆,选择proguard,开始使用各种问题,各种jar包版本问题,但最终成功了,记录一下,也希望能够帮助大家 在pom中添加代码: <build> <fin ...

  4. 20145202 《网络对抗技术》 PC平台逆向破解

    20145202 <网络对抗技术> PC平台逆向破解 准备工作 先将环境设置为:堆栈可执行.地址随机化关闭 参考http://git.oschina.net/wildlinux/NetSe ...

  5. C#属性默认值设置

    关于在MVC中view中设置默认值,可以象如下设置: 1.关于VIEWMODEL的部分 如果是C#  6.0,网上资料查到说可以 如果语法不支持,只能改回.net 2.0的写法. public cla ...

  6. SSM框架学习思维导图

    SSM框架学习思维导图 2017年08月11日 20:17:28 阅读数:1141 放上前段时间学习SSM框架以及Spring.SpringMVC.MyBatis的学习结果,输出思维导图一共四幅图.这 ...

  7. 【连载】Bootstrap开发漂亮的前端界面之自定义右键菜单

    连载: 1<教你用Bootstrap开发漂亮的前端界面> 2.<Bootstrap开发漂亮的前端界面之实现原理> 网页中的自定义右键菜单越来越普遍,自定义右键菜单可以增强用户体 ...

  8. error C2248: 'QObject::QObject' : cannot access private member declared in class 'QObject'

    1.error C2471: cannot update program database vc90.pdb 解决方案:https://blog.csdn.net/shuixin536/article ...

  9. Ubuntu 安装Qt

    下载Qt,这里步骤略过 设置共享, 如果设置共享没有问题,可以不看下面的 如果设置共享,在Ubuntu中找不到共享文件的话,那安找下面的步骤在来一次. http://blog.csdn.net/z60 ...

  10. ardupilot_gazebo仿真(一)

    ardupilot_gazebo仿真 标签(空格分隔): 未分类 ardupilot_gazebo仿真 官网网址 代码更新地址 Ardupilot Gazebo Plugin & Models ...