AtCoder - agc043_a 和 POJ - 2336 dp
题意:
给你一个n行m列由'#'和'.'构成的矩阵,你需要从(1,1)点走到(n,m)点,你每次只能向右或者向下走,且只能走'.'的位置。
你可以执行操作改变矩阵:
你可以选取两个点,r0,c0;r1,c1。以(r0,c0)为小矩阵左上角坐标,以(r1,c1)为小矩阵右下角坐标。你要把这个小矩阵中的所有字符反转(也就是原来是'#'的,要变成'.',原来是'.'的,要变成'#')
题解:
对于样例
我们可以看成反转之后的矩阵最终从(1,1)走到(n,m)的只有一条路径,不管其他点(如下,*号就是我们最终选择的路径)
那么我们就可以反转(1,1)和(2,3)这个小矩阵,或者(2,1),(2,3)这个小矩阵。(1,1)和(2,3)这个小矩阵反转的时候虽然涉及到了一些其他点(第一列所有点),但是我们最终要走的路径没有用到它,所以不用管它。
代码:
#include <bits/stdc++.h>
typedef long long ll;
const int maxn = 1e2 + 10;
const int INF = 0x3f3f3f3f;
char s[maxn][maxn];
int dp[maxn][maxn];
int min(int a, int b)
{
if (a < b)
return a;
else
return b;
}
int max(int a, int b)
{
if (a > b)
return a;
else
return b;
}
int main()
{
int n, m;
scanf("%d%d", &n, &m);
for (int i = 1; i <= n; ++i)
{
scanf("%s", s[i] + 1);
}
dp[1][1] = (s[1][1] == '#');
for (int i = 1; i <= n; ++i)
{
for (int j = 1; j <= m; ++j)
{
if (i == 1 && j == 1)
continue;
char ch = s[i][j];
dp[i][j] = INF;
if (i > 1)
{
if (s[i - 1][j] == ch)
dp[i][j] = min(dp[i][j], dp[i - 1][j]);
else
dp[i][j] = min(dp[i][j], dp[i - 1][j] + (ch == '#'));
}
if (j > 1)
{
if (s[i][j - 1] == ch)
dp[i][j] = min(dp[i][j], dp[i][j - 1]);
else
dp[i][j] = min(dp[i][j], dp[i][j - 1] + (ch == '#'));
}
}
}
printf("%d\n", dp[n][m]);
return 0;
}
POJ - 2336 题意:
现在有m辆车在左岸,你需要用一艘船把所有车运送到右岸,每次船只能运送n辆车。船过河的时间为t(也就是一来一回所需时间2*t)。
问你把所有车运送到右岸最少是什么时候,在这个基础上给出最少运送次数(运送次数不算船从右岸返回到左岸)
题目给你m辆车到达左岸的时间点vi。
题解:
暴力转移dp,dp[i]表示把前i辆车运送到右岸之后船又回到左岸的最小时间点
代码:
#include <stdio.h>
#include <algorithm>
#include <iostream>
using namespace std;
const int maxn = 2e3 + 10;
const int INF=0x3f3f3f3f;
int max(int a,int b)
{
if(a>b) return a;
else return b;
}
int v[maxn],cnt[maxn],dp[maxn];
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int n,t,m;
scanf("%d%d%d",&n,&t,&m);
for(int i=1;i<=m;++i)
{
scanf("%d",&v[i]);
}
for(int i=1;i<=m;++i)
{
dp[i]=INF;
for(int j=i-n;j<i;++j)
{
if(dp[i]>max(dp[j],v[i]))
{
dp[i]=max(dp[j],v[i]);
cnt[i]=cnt[j]+1;
}
}
dp[i]+=2*t;
}
printf("%d %d\n",dp[m]-t,cnt[m]);
}
return 0;
}
AtCoder - agc043_a 和 POJ - 2336 dp的更多相关文章
- hdu 1513 && 1159 poj Palindrome (dp, 滚动数组, LCS)
题目 以前做过的一道题, 今天又加了一种方法 整理了一下..... 题意:给出一个字符串,问要将这个字符串变成回文串要添加最少几个字符. 方法一: 将该字符串与其反转求一次LCS,然后所求就是n减去 ...
- poj 1080 dp如同LCS问题
题目链接:http://poj.org/problem?id=1080 #include<cstdio> #include<cstring> #include<algor ...
- poj 1609 dp
题目链接:http://poj.org/problem?id=1609 #include <cstdio> #include <cstring> #include <io ...
- POJ 1037 DP
题目链接: http://poj.org/problem?id=1037 分析: 很有分量的一道DP题!!! (参考于:http://blog.csdn.net/sj13051180/article/ ...
- Jury Compromise POJ - 1015 dp (标答有误)背包思想
题意:从 n个人里面找到m个人 每个人有两个值 d p 满足在abs(sum(d)-sum(p)) 最小的前提下sum(d)+sum(p)最大 思路:dp[i][j] i个人中 和 ...
- atcoder B - Frog 2 (DP)
B - Frog 2 Time Limit: 2 sec / Memory Limit: 1024 MB Score : 100100 points Problem Statement There a ...
- atcoder A - Frog 1(DP)
A - Frog 1 Time Limit: 2 sec / Memory Limit: 1024 MB Score : 100100 points Problem Statement There a ...
- poj 1485 dp
转自:http://www.cnblogs.com/kuangbin/archive/2011/11/12/2246407.html [题目大意] 一条公路上有n个旅馆,选出其中k个设置仓库,一个仓库 ...
- POJ 3017 DP + 单调队列 + 堆
题意:给你一个长度为n的数列,你需要把这个数列分成几段,每段的和不超过m,问各段的最大值之和的最小值是多少? 思路:dp方程如下:设dp[i]为把前i个数分成合法的若干段最大值的最小值是多少.dp转移 ...
随机推荐
- Linux基础命令整合
linux基础命令整理 1.系统相关命令 shutdown -h now 关闭系统(1) init 0 关闭系统(2) telinit 0 关闭系统(3) shutdown -h hours:minu ...
- Socket粘包问题终极解决方案—Netty版(2W字)!
上一篇我们讲了<Socket粘包问题的3种解决方案>,但没想到评论区竟然炸了.介于大家的热情讨论,以及不同的反馈意见,本文就来做一个扩展和延伸,试图找到问题的最优解,以及消息通讯的最优解决 ...
- 几幅图,拿下 HTTPS
我很早之前写过一篇关于 HTTP 和 HTTPS 的文章,但对于 HTTPS 介绍还不够详细,只讲了比较基础的部分,所以这次我们再来深入一下 HTTPS,用实战抓包的方式,带大家再来窥探一次 HTTP ...
- 【SpringBoot1.x】RestfulCRUD
SpringBoot1.x RestfulCRUD 文章源码 添加资源 将所有的静态资源都添加到 src/main/resources/static 文件夹下,所有的模版资源都添加到 src/main ...
- Spring Boot 应用使用spring session+redis启用分布式session后,如何在配置文件里设置应用的cookiename、session超时时间、redis存储的namespace
现状 项目在使用Spring Cloud搭建微服务框架,其中分布式session采用spring session+redis 模式 需求 希望可以在配置文件(application.yml)里设置应用 ...
- CopyOnWriteArrayList 读写分离,弱一致性
为什么会有CopyOnWriteArrayList? 我们知道ArrayList和LinkedList实现的List都是非线程安全的,于是就有了Vector,它是基于ArrayList的线程安全集合, ...
- innnodb_doublewrite
有写场景下,双写缓冲确实没必要,例如,你也许像在备库上禁用双写缓冲,此外,一些文件系统,例如zfs做了同样的事,所以,没必要再让innodb做一遍. innodb_double_write=0 即可关 ...
- Py-re正则模块,log模块,config模块,哈希加密
9.re正则表达式模块,用于字符串的模糊匹配 元字符: 第一:点为通配符 用.表示匹配除了换行符以外的所有字符 import re res=re.findall('a..x','adsxwassxdd ...
- jmeter---线程组执行顺序记录
一.默认未勾选测试计划中独立运行每个线程组时,线程组并行执行,如下,设置三个请求,每个线程组设置5秒启动5个线程. 未勾选独立运行 运行结果如下,三个线程并行执行 勾选后,一个线程组执行完后才执行下一 ...
- 基于final shell的linux命令
final shell操作教程: 1.查看API实时日志:cd ../../data/log/api tail -100f anyAPI-server.log2.关闭日志:control+c3.恢复实 ...