TOPOI 测验1320, 问题C: 4410: [CF41D]Pawn 解题报告
题目大意
在一个树阵中按一定走法取一些树,使和最大且被 k+1整除
解题思路
类似一个数塔问题
因为最后的结果要被 k+1 整除,所以可以记录到每一个点 对 k+1 取余结果不同的最优解(最大值),不用记录每一个数,浪费空间和时间
举个例子:
当到达 (i, j) 这个点时,有两种路线得到的值分别为a, b(a>b),且a % (k+1) = x, b % (k+1) = x,那么此时只需记录a,将b舍去
因为余数相同不会对后面的结果产生影响
最后枚举最后一行对 k+1取余结果为0的结果,取最大值
空间 n*m*k, 时间n*m*k
路径记录
再开两个数组分别记录每个最优解是由哪个状态转移而来的,输出时递归输出 递归过程
void print (int x, int y, int q) { // 递归到第x行,第y列,%(k+1) 的结果为q
if (x == n) printf ("%d\n", y);
else {
print (x + 1, y + ans[x][y][q].lr, ans[x][y][q].mod);
if (ans[x][y][q].lr == 1) putchar ('L');
else putchar ('R');
}
}
代码
#include <bits/stdc++.h>
using namespace std;
struct e {int lr, mod;} ans[105][105][15]; //ans记录每一步方向及 %k的余数
int n, m, k, a[105][105], f[105][105][15], w;
char ch;
void print (int x, int y, int q) { // 递归到第x行,第y列,%(k+1) 的结果为q
if (x == n) printf ("%d\n", y);
else {
print (x + 1, y + ans[x][y][q].lr, ans[x][y][q].mod);
if (ans[x][y][q].lr == 1) putchar ('L');
else putchar ('R');
}
}
int main(){
scanf ("%d %d %d", &n, &m, &k); k++;
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++) cin >> ch, a[i][j] = ch -'0';
memset (f, -1, sizeof (f));
for (int i = 1; i <= m; i++) f[n][i][a[n][i]%k] = a[n][i];
for (int i = n - 1; i; i--)
for (int j = 1; j <= m; j++)
for (int p = 0; p < k; p++) {
int t = (p + a[i][j]) % k;
if (j != 1 and f[i+1][j-1][p] >= 0)
f[i][j][t] = f[i+1][j-1][p] + a[i][j], ans[i][j][t] = (e) {-1, p};
if (j != m and f[i+1][j+1][p] >= 0 and f[i+1][j+1][p] + a[i][j] > f[i][j][t])
f[i][j][t] = f[i+1][j+1][p] + a[i][j], ans[i][j][t] = (e) {1, p};
}
for (int i = 1; i <= m; i++) if (f[1][i][0] > f[1][w][0]) w = i; //找到起始位置
if (!w) {puts("-1"); return 0;}
printf ("%d\n", f[1][w][0]);
print (1, w, 0);
return 0;
}
TOPOI 测验1320, 问题C: 4410: [CF41D]Pawn 解题报告的更多相关文章
- 洛谷 P4397 [JLOI2014]聪明的燕姿 / TOPOI 测验1315, 问题E: 1935: 聪明的燕姿 解题报告
题目链接 : 1. 洛谷 2.topoi . 大致题意:输入一个数s,找出所有约数和为s的数 关于一个数的约数和求法: 一个>1的整数可以被分解为多个 质数 的乘方,设数 s = p1k1 * ...
- Topoi 测验1301, 问题C: 1959: 解题 解题报告
Topoi(一个经常会炸的网站) 本题提交链接 很久以前的题目了, 刚开了博客,来写一波题解 先看一波提交记录: 调了好几天QAQ 唉! 要是这些高手里有我估计直接 输出1 就AC了 算法 DFS + ...
- $CF41D\ Pawn$
\(problem\) 与这题 灰常的相似 然后内存可能过大 开个滚动数组 因为数塔问题总是 只需要上面一行的两个状态(这题就是数塔问题) 下面的代码与原题不符.(原题要输出路径)想抄的可以走了 输出 ...
- SCOJ4427 / TOPOI 4404: Miss Zhao's Graph 解题报告
题目链接 SCOJ TOPOI 题目描述 Problem 给定一个包含n个顶点m条边的带权有向图,找一条边数最多的路径,且路径上的边的权值严格递增.图中可能有重边和自环. Input Data 第一行 ...
- 2018.10.05 TOPOI提高组模拟赛 解题报告
得分: \(100+5+100=205\)(真的是出乎意料) \(T1\):抵制克苏恩(点此看题面) 原题: [BZOJ4832][Lydsy1704月赛] 抵制克苏恩 应该还是一个比较简单的\(DP ...
- (转)POJ题目分类
初期:一.基本算法: (1)枚举. (poj1753,poj2965) (2)贪心(poj1328,poj2109,poj2586) (3)递归和分治法. (4)递推. ...
- poj分类
初期: 一.基本算法: (1)枚举. (poj1753,poj2965) (2)贪心(poj1328,poj2109,poj2586) (3)递归和分治法. ( ...
- 转载 ACM训练计划
leetcode代码 利用堆栈:http://oj.leetcode.com/problems/evaluate-reverse-polish-notation/http://oj.leetcode. ...
- POJ题目分类(按初级\中级\高级等分类,有助于大家根据个人情况学习)
本文来自:http://www.cppblog.com/snowshine09/archive/2011/08/02/152272.spx 多版本的POJ分类 流传最广的一种分类: 初期: 一.基本算 ...
随机推荐
- BEC listen and translation exercise 49
Astronaut Sounds Alarm on Asteroids If a big asteroid with Earth's name on it were to reach us unimp ...
- 如何定义一个接口(接口Interface只在COM组件中定义了,MFC和C++都没有接口的概念)
接口是COM中的关键词,在c++中并没有这个概念.接口是一种极度的抽象.接口用在COM组件中有自己的GUID值,因此定义接口时一定要指定它的GUID值. 实际上接口就是struct,即#define ...
- python字符串相关操作
字符串搜索相关搜索指定字符串,没有返回-1:str.find('t')指定起始位置搜索:str.find('t',start)指定起始及结束位置搜索:str.find('t',start,end)从右 ...
- deepmoji:文本预测emoji
输入句子,预测emoji demo: https://deepmoji.mit.edu/ github: https://github.com/bfelbo/DeepMoji 能够被预测的emoji ...
- 07 - Django应用第四步
知识点 1) 表单的编写 CSRF问题 forloop.counter 2) 视图函数的知识 GET和POST HttpResponseRedirect的使用 reverse的使用 3) 通用视图 C ...
- Cannot find PHPUnit in include path (.;C:\php5\pear)
--pear channel-discover pear.phpunit.de --pear install phpunit/PHPUnit 此时会显示: No valid packages foun ...
- ACM学习历程—Hihocoder 1233 Boxes(bfs)(2015北京网赛)
hihoCoder挑战赛12 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 There is a strange storehouse in PKU. In this ...
- [转]JavaScript文件操作(2)-FileReader
在上篇文章中,我介绍了在JavaScript操作文件,重点讲了如何取得File对象. 这些对象包含的文件的元数据在上传或者拖放到浏览器中时可以获取到.有了文件当然接下来就是读取文件了. FileRea ...
- MySQL5.7出现Your password has expired. To log in you must change it using a client that supports expir
今天晚上本来想写bootstrap-fileinput插件集成fastdfs的文章,但是刚启动idea里面的QiYuAdmin就出现了错误: Your password has expired. To ...
- 1 ELK 简介
日志主要包括系统日志.应用程序日志和安全日志,系统运维和开发人员可以通过日志了解服务器软硬件信息.检查配置过程中的错误及错误发生的原因.经常分析日志可以了解服务器的负荷,性能安全性,从而及时采取措施纠 ...