https://csacademy.com/contest/round-39/task/seven-segment-display/

可以知道,只有1是无解

而且肯定是选出来的位数约小越好。

位数 = (k + 6) / 7,因为总是可以通过买7来最大化缩小位数

然后枚举每一位选什么,选的时候,需要的是,(k - cost + 6) / 7应该是比之前少一位的。这就是合法的。

选一个最小的合法的数字即可。

#include <bits/stdc++.h>
#define IOS ios::sync_with_stdio(false)
using namespace std;
#define inf (0x3f3f3f3f)
typedef long long int LL;
int num[];
int a[];
vector<int> vc;
bool dfs(int lef, int pre) {
if (!lef) return true;
if (lef == ) return false;
for (int i = ; i <= ; ++i) {
if (lef >= num[a[i]] && ((lef - num[a[i]] + ) / ) == pre - ) {
vc.push_back(a[i]);
if (dfs(lef - num[a[i]], pre - )) return true;
vc.pop_back();
}
}
return false;
}
void work() {
a[] = , a[] = , a[] = , a[] = , a[] = , a[] = , a[] = ;
num[] = , num[] = , num[] = , num[] = , num[] = , num[] = ;
num[] = ;
int k;
scanf("%d", &k);
if (k == ) {
cout << - << endl;
return;
}
if (k <= ) {
for (int i = ; i <= ; ++i) {
if (k == num[a[i]]) {
printf("%d\n", a[i]);
return;
}
}
}
int sel = (k + ) / ;
for (int i = ; i <= ; ++i) {
vc.push_back(a[i]);
if ((k - num[a[i]] + ) / == sel - ) {
if (dfs(k - num[a[i]], (k - num[a[i]] + ) / )) {
for (int i = ; i < vc.size(); ++i) {
printf("%d", vc[i]);
}
return;
}
}
vc.pop_back();
}
printf("-1\n");
} int main() {
#ifdef local
freopen("data.txt", "r", stdin);
// freopen("data.txt", "w", stdout);
#endif
work();
return ;
}

Seven-segment Display 贪心选择,快速判断能否有解的更多相关文章

  1. JavaScript正则表达式快速判断技巧

    这里是JS的正则的一点心得,并不是最完整的规则汇总,更侧重实际运用中的快速判断,初学者接触正则之后往往会被一堆星号括号给弄晕,有了一些速判技巧就能从整体上把握从而不慌乱. JS正则快速判断技巧的核心就 ...

  2. 快速判断ie10及以上版本浏览器

    if (!(/msie [6|7|8|9]/i.test(navigator.userAgent))){ //ie10以上 }; 快速判断ie10及以上版本浏览器

  3. PHP取二进制文件头快速判断文件类型

    <?php /*文件扩展名说明 *7173 gif *255216 jpg *13780 png *6677 bmp *239187 txt,aspx,asp,sql *208207 xls.d ...

  4. 腾讯面试题 腾讯面试题:给40亿个不重复的unsigned int的整数,没排过序的,然后再给一个数,如何快速判断这个数是否在那40亿个数当中?

    腾讯面试题:给40亿个不重复的unsigned int的整数,没排过序的,然后再给一个数,如何快速判断这个数是否在那40亿个数当中?  这个题目已经有一段时间了,但是腾讯现在还在用来面试.腾讯第一次面 ...

  5. 利用linq快速判断给定数字是否包含在某个段范围内

    一.需求: 知道某段范围0x0020~0x007F0x00A0~0x017F0x01A0~0x01CF0x01F0~0x01FF0x0210~0x021F0x1EA0~0x1EFF给定一个值,快速判断 ...

  6. (2017浙江省赛E)Seven Segment Display

    Seven Segment Display Time Limit: 2 Seconds      Memory Limit: 65536 KB A seven segment display, or ...

  7. ZOJ 3962 Seven Segment Display

    Seven Segment Display 思路: 经典数位dp 代码: #include<bits/stdc++.h> using namespace std; #define LL l ...

  8. zoj 月赛B题(快速判断一个大数是否为素数)

    给出一个64位的大数,如何快速判断其是否为素数 #include<algorithm> #include<cstdio> #include<cstring> #in ...

  9. 2017浙江省赛 E - Seven Segment Display ZOJ - 3962

    地址:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3962 题目: A seven segment display, or ...

随机推荐

  1. 电子商务网站SQL注入项目实战一例(转载)

    故事A段:发现整站SQL对外输出: 有个朋友的网站,由于是外包项目,深圳某公司开发的,某天我帮他检测了一下网站相关情况. 我查看了页面源代码,发现了个惊人的事情,竟然整站打印SQL到Html里,着实吓 ...

  2. saltstack集中化管理平台

    1.安装与启动 yum install salt-master -y 安装服务端 chkconfig salt-master on 自启动 service salt-master start 启动 y ...

  3. 微服务理论之四:SOA

    1.什么是SOA? SOA代表了面向服务的架构. SOA是一种使用松耦合的黑盒子服务构建业务应用的体系架构,这些服务可以通过编排连接在一起以实现特定的功能. 2.SOA特点 以下是服务的SOA的主要特 ...

  4. Mybatis+Mysql 返回主键的值

    需求:使用MyBatis往MySQL数据库中插入一条记录后,需要返回该条记录的自增主键值. 方法:在mapper中指定keyProperty属性,示例如下: <insert id="i ...

  5. Oracle---SQL子查询---详解

    子查询其实就是指嵌入到其他语句中的select语句,也称其为嵌套查询. 值得注意的在DDL语句中应用子查询的时候子查询可以使用order by 子句. 但是在DML语句中的where子句,set子句中 ...

  6. ES6学习之正则扩展

    RegExp正则函数 var reg = new RegExp("abc","igm"); //等价于 var reg = new RegExp(/abc/ig ...

  7. qt数据库sql语句使用c++中的变量

    void SerialWidget::on_btnMysql_clicked() { qDebug()<<QSqlDatabase::drivers()<<endl; /*列出 ...

  8. HTML5小知识

    1.HTML5一种“妥协的”语法 2.特点: 标签不区分大小写 元素可以省略结束标签 元素属性可以省略属性值 属性的属性值可以不适用引号

  9. sharepoint Foundation 2013 error

    安装必须软件时提示以下错误 错误提示日志: 015-05-28 10:40:25 - Request for install time of 应用程序服务器角色.Web 服务器(IIS)角色2015- ...

  10. adroid 分辨率适配

    (1)drawable-hdpi里面存放高分辨率的图片,如WVGA (480x800),FWVGA (480x854) (2)drawable-mdpi里面存放中等分辨率的图片,如HVGA (320x ...