hdu2929 Bigger Is Better
题意
给出n根木棍,要你拼一个最大的数,并且这个数是m的倍数。
题解
显然越长的数越大。设\(dp[i][j]\)表示用i根木棍并且\(mod m = j\)的最大长度。
我们很容易想出dp方程,再用nxt数组存储方案。
#include <cstdio>
#include <cstring>
const int N = 105, M = 3005;
int dp[N][M], nxt[N][M];
const int a[] = { 6, 2, 5, 5, 4, 5, 6, 3, 7, 6 };
int ina; char inc;
inline int geti() {
while ((inc = getchar()) < '0' || inc > '9'); ina = inc - '0';
while ((inc = getchar()) >= '0' && inc <= '9') ina = (ina << 3) + (ina << 1) + inc - '0';
return ina;
}
int main() {
int Case = 0, n, m, i, j, k, _i, _j, maxlen;
while (n = geti()) {
m = geti(); maxlen = 0;
memset(dp, -1, sizeof dp);
memset(nxt, -1, sizeof nxt);
dp[0][0] = 0;
for (i = 0; i < n; ++i)
for (j = 0; j < m; ++j)
if (~dp[i][j]){
for (k = 9; ~k; --k)
if (i + a[k] <= n) {
_i = i + a[k], _j = (j * 10 + k) % m;
if (dp[i][j] + 1 > dp[_i][_j]) {
dp[_i][_j] = dp[i][j] + 1;
if (dp[_i][_j] > maxlen && (!_j)) maxlen = dp[_i][_j];
}
}
}
for (i = n; ~i; --i)
for (j = 0; j < m; ++j)
if (~dp[i][j]) {
if ((dp[i][j] ^ maxlen) || j) {
for (k = 9; ~k; --k)
if (i + a[k] <= n){
_i = i + a[k], _j = (j * 10 + k) % m;
if (dp[_i][_j] == dp[i][j] + 1 && (~nxt[_i][_j])) {
nxt[i][j] = k; break;
}
}
} else nxt[i][j] = 10;
}
printf("Case %d: ", ++Case);
if (maxlen){
i = 0, j = 0;
while (nxt[i][j] ^ 10) {
printf("%d", nxt[i][j]);
_i = i + a[nxt[i][j]]; _j = (j * 10 + nxt[i][j]) % m;
i = _i, j = _j;
}
puts("");
} else puts((n >= a[0]) ? "0" : "-1");
}
}
此题我还在网上看见了一个神解法,还没验证是不是对的。
http://blog.csdn.net/iwinstone/article/details/1477773
hdu2929 Bigger Is Better的更多相关文章
- HDU2929 Bigger is Better[DP 打印方案 !]
Bigger is Better Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others ...
- spark - tasks is bigger than spark.driver.maxResultSize
Error ERROR TaskSetManager: Total size of serialized results of 8113 tasks (1131.0 MB) is bigger tha ...
- MYSQL 内存报错 Use 'mysqld --thread_stack=#' to specify a bigger stack.
今天在使用mysql的过程中,连接数据库始终无法成功 最后发现是数据库无法执行增加修改的操作 :错误代码 Thread stack overrun: 11552 bytes used of a 13 ...
- 数据库执行sql报错Got a packet bigger than 'max_allowed_packet' bytes及重启mysql
准备在mysql上使用数据库A,但mysql5经过重装后,上面的数据库已丢失,只得通过之前备份的A.sql重新生成数据库A. 1.执行sql报错 在执行A.sql的过程中,出现如下错误:Got a p ...
- HDOJ 2929 Bigger is Better
DP....好难的DP... Bigger is Better Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 ...
- don't forget the bigger picture
Imagine a circle that contains all of human knowledge: By the time you finish elementary school, you ...
- Got a packet bigger than 'max_allowed_packet' bytes
昨天用导入数据的时候发现有的地方有这个错误.后来才发现我用RPM包装的MYSQL配置文件里面有old_passwords=1去掉就可以了. Got a packet bigger than ‘max_ ...
- Navicat导入数据时发生了报错 --- 1153 - Got a packet bigger than 'max_allowed的处理办法
今天我在使用Navicat导入.sql文件数据时,发现本来是80万条的数据,结果只导入了10万条左右,而且在其错误信息日志中,我发现了这样一条错误:1153 - Got a packet bigger ...
- Navicat 导入数据报错 --- 1153 - Got a packet bigger than 'max_allowed_packet' bytes
在用Navicat导入SQL文件时报错:MySql 错误 Err [Imp] 1153 - Got a packet bigger than 'max_allowed_packet' bytes 查了 ...
随机推荐
- XML语言基础3--Schema
1.什么是Schema XML Schema是用一套预先规定的XML元素和属性创建的,这些元素和属性定义了XML文档的结构和内容模式. XML Schema规定XML文档实例的结构和每个元素/属性的数 ...
- 简述SQL2008部署多实例集群(学习)
数据库集群 集群的存在意义是为了保证高可用.数据安全.扩展性以及负载均衡. 什么是集群? 由二台或更多物理上独立的服务器共同组成的"虚拟"服务器称之为集群服务器.一项称做M ...
- SQL2005/2008 无法连接错误
SQL2005/2008 .或者是localhost可以访问,但是127.0.0.1或者IP无法访问 打开[SQL Server 配置管理器](如果是MSSQL2005,在运行中输入SQLServer ...
- kmeans算法c语言实现,能对不同维度的数据进行聚类
最近在苦于思考kmeans算法的MPI并行化,花了两天的时间把该算法看懂和实现了串行版. 聚类问题就是给定一个元素集合V,其中每个元素具有d个可观察属性,使用某种算法将V划分成k个子集,要求每个子集内 ...
- [WPF系列]-TreeView的常用事项
引言 项目经常会用Treeview来组织一些具有层级结构的数据,本节就将项目使用Treeview常见的问题作一个总结. DataBinding数据绑定 DataTemplate自定义 <Hier ...
- LCA 倍增||树链剖分
方法1:倍增 1498ms #include <iostream> #include <cstdio> #include <algorithm> #include ...
- mybatis传入多个参数
一.单个参数: public List<XXBean> getXXBeanList(String xxCode); <select id="getXXXBeanList&q ...
- bootstrap的介绍 和使用
开发中文网: v3.bootcss.com 前端?框架? 用户 --> 前端应用程序 --->后端应用程序 --->后端服务器. 框架:Library 或者lib,都指得是框架 ...
- C#.NET 大型企业信息化系统集成快速开发平台 4.2 版本 - 员工离职管理
当公司有几万人,上千家加盟网点,几个庞大的直属分公司后,系统账户的有效管理也是一个头疼的问题,把所有的帐户及时进行科学的管理,有人员离职时及时进行记录,防止离职人员的系统账户有各种安全漏洞. 谁什么时 ...
- Swift学习(三):闭包(Closures)
定义 闭包(Closures)是独立的函数代码块,能在代码中传递及使用. 语法 {(parameters) -> return type in statements } 注:闭包表达式语法可以使 ...