CF#637 D. Nastya and Scoreboard DP
D. Nastya and Scoreboard
题意
一块电子屏幕上有n个数字。
每个数字是通过这样7个线段显示的,现在你不小心打坏了k个线段,给出打坏之后的n个数字的显示方式,问之前的屏幕表示的最大数字是多少?
思路
看数据范围感觉就是DP。
我们把n个数字先倒过来,要尽可能的让后面的数字大。
dp[i][j][k]
表示前i个数字打坏了j个线段最后一个数字为k是否可行。
对于第i个数字,枚举可以变成的数字。
回溯一下即可。
代码
#include<bits/stdc++.h>
#define pb push_back
using namespace std;
typedef long long ll;
const int N=2e5+10;
const int mod=1e9+7;
const int inf=0x3f3f3f3f;
char str[N][10];
char num[10][10]= {"1110111", "0010010", "1011101", "1011011", "0111010", "1101011", "1101111", "1010010", "1111111", "1111011"};
int dp[2010][2010][10];
int main()
{
int n,k;
scanf("%d%d",&n,&k);
for(int i=n; i>=1; i--)//先把n个数字倒过来
scanf("%s",str[i]);
for(int i=0; i<10; i++)
dp[0][0][i]=1;
for(int i=1; i<=n; i++)//前i个数字
{
for(int j=0; j<=k; j++)//打坏了j个线段
{
for(int l=0; l<=9; l++)//第i个数字为l是否可行
{
int flag=0,sum=0;//分别表示是否可以变成l,以及需要的线段数量
for(int m=0; m<7; m++)
{
if(num[l][m]<str[i][m])
{
flag=1;
break;
}
sum+=num[l][m]-str[i][m];
}
if(flag||j<sum) continue;//不能变成,或者需要的线段数量比打坏的多
for(int m=0; m<10; m++)//判断当前是否可行
{
if(dp[i-1][j-sum][m])
{
dp[i][j][l]=1;
break;
}
}
}
}
}
int sign=0;
for(int i=0;i<=9;i++)
{
if(dp[n][k][i])
{
sign=1;
break;
}
}
if(sign)
{
for(int i=n;i;i--)
{
for(int j=9;j>=0;j--)//每一位选择最大的一个
{
if(dp[i][k][j])
{
printf("%d",j);
for(int l=0;l<7;l++)
k-=num[j][l]-str[i][l];
break;
}
}
}
printf("\n");
}
else printf("-1\n");
return 0;
}
CF#637 D. Nastya and Scoreboard DP的更多相关文章
- Codeforces 1340B Nastya and Scoreboard(dp,贪心)
题目链接OvO 题目大意 给你\(n\)串数字,\(1\)代表该位置是亮的,\(0\)代表是灭的.你必须修改\(k\)个数字,使某些\(0\)变为\(1\).注意,只能把原来的\(0\)改成\(1 ...
- CF#637 C. Nastya and Strange Generator
C. Nastya and Strange Generator 题意 有一个随机全排列生成器,给出你一个全排列,让判断是否可以通过这个生成器产生. 生成器工作方式: 第i步为数字i寻找位置pos. 首 ...
- CF1340B Nastya and Scoreboard(暴搜剪枝/dp)
Question 一个n个数码位的分数板,每一个数码位都是一个七段数码管,现在给出每个数码位的显示情况,问再点亮k段数码管的话能显示的最大的数是多少,如果不能构成一串数字,就输出-1 Solution ...
- CF #374 (Div. 2) C. Journey dp
1.CF #374 (Div. 2) C. Journey 2.总结:好题,这一道题,WA,MLE,TLE,RE,各种姿势都来了一遍.. 3.题意:有向无环图,找出第1个点到第n个点的一条路径 ...
- CF 372B Counting Rectangles is Fun [dp+数据维护]
题意,给出一个n行m列的矩阵 里面元素是0或者1 给出q个询问 a,b,c,d 求(a,b)到(c,d)有多少个由0组成的矩形 我们定义 watermark/2/text/aHR0cDovL2Jsb2 ...
- CF EDU 1101D GCD Counting 树形DP + 质因子分解
CF EDU 1101D GCD Counting 题意 有一颗树,每个节点有一个值,问树上最长链的长度,要求链上的每个节点的GCD值大于1. 思路 由于每个数的质因子很少,题目的数据200000&l ...
- CF 407B Long Path[观察性质 DP]
B. Long Path time limit per test 1 second memory limit per test 256 megabytes input standard input o ...
- cf.301.D. Bad Luck Island(dp + probabilities)
D. Bad Luck Island time limit per test 2 seconds memory limit per test 256 megabytes input standard ...
- CF 337D Book of Evil 树形DP 好题
Paladin Manao caught the trail of the ancient Book of Evil in a swampy area. This area contains n se ...
随机推荐
- 【WPF学习】第六十七章 创建自定义面板
前面两个章节分别介绍了两个自定义控件:自定义的ColorPicker和FlipPanel控件.接下来介绍派生自定义面板以及构建自定义绘图控件. 创建自定义面板是一种特殊但较常见的自定义控件开发子集.前 ...
- 详解 List接口
本篇博文所讲解的这两个类,都是泛型类(关于泛型,本人在之前的博文中提到过),我们在学习C语言时,对于数据的存储,用的差不多都是数组和链表. 但是,在Java中,链表就相对地失去了它的存在价值,因为Ja ...
- 泛微ecology OA系统在数据库配置信息泄露
漏洞描述 攻击者可通过该漏洞页面直接获取到数据库配置信息,攻击者可通过访问存在漏洞的页面并解密从而获取数据库配置信息,如攻击者可直接访问数据库,则可直接获取用户数据,由于泛微e-cology默认数据库 ...
- HBase可用性分析与高可用实践
HBase作为一个分布式存储的数据库,它是如何保证可用性的呢?对于分布式系统的CAP问题,它是如何权衡的呢? 最重要的是,我们在生产实践中,又应该如何保证HBase服务的高可用呢? 下面我们来仔细分析 ...
- Jquery中 $.Ajax() 参数详解
1.url:要求为String类型的参数,(默认为当前页地址)发送请求的地址. 2.type:要求为String类型的参数,请求方式(post或get)默认为get.注意其他http请求方法,例如pu ...
- C#多线程(12):线程池
目录 线程池 ThreadPool 常用属性和方法 线程池说明和示例 线程池线程数 线程池线程数说明 不支持的线程池异步委托 任务取消功能 计时器 线程池 线程池全称为托管线程池,线程池受 .NET ...
- socket小计
socket,是一个实现了双向通信的链接. 将http比喻为轿车,承载数据.传递数据,那么socket,就是轿车的发动机,它轿车动起来.
- 关于phpstorm、idea、gogland等等ide全家桶设置
2017-08-29 16:30:55 Preferences => IDE Settings => Editor => Code Completion => Autopopu ...
- 全球数字高程数据(DEM)详解,还有地形晕渲、等高线等干货
1 基本概念 DEM是数字高程模型的英文简称(Digital Elevation Model),是研究分析地形.流域.地物识别的重要原始资料.由于DEM 数据能够反映一定分辨率的局部地形特征,因此通过 ...
- 从GC的SuppressFinalize方法带你深刻认识Finalize底层运行机制
如果你经常看开源项目的源码,你会发现很多Dispose方法中都有这么一句代码: GC.SuppressFinalize(this); ,看过一两次可能无所谓,看多了就来了兴趣,这篇就跟大家聊一聊. 一 ...