E - Loppinha, the boy who likes sopinha Gym - 101875E

这个题目是一个dp,这个应该很容易看出来,但是对于状态的定义其实有点难去想,

看了题解dp[i][j]表示前面i个数交换j次的还需要消耗的能力,

有了这个定义,转移方程就比较好写了,就是如果一个状态是1,那么就判断它要不要休息。

#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <queue>
#include <vector>
#define inf 0x3f3f3f3f
using namespace std;
const int maxn = 1e5 + ;
int a[maxn];
int dp[][];//表示已经处理了前面的i个,然后还可以处理j次需要消耗的能量。
int n, m; int cul(int x)
{
return x * (x + ) / ;
} int dfs(int p,int k)
{
if (k < ) return inf;//如果k<0这个是不应该出现的情况,如果出现了,说明交换的次数超了,所以用inf表示不可能
if (p >= n) return ;//如果到达p==n的同时k>=0,这个就说明这个情况是合理的,而且p==n的时候就不会需要消耗能力了。
if (dp[p][k] != -) return dp[p][k];
if (a[p] == ) return dfs(p + , k);//如果这一个值它是0就不需要做过多的考虑
int i = ;
dp[p][k] = inf;
for (i = p; i < n&&a[i] == ; i++)
{
dp[p][k] = min(dp[p][k], dfs(i + , k - ) + cul(i - p));//转移方程
}
dp[p][k] = min(dp[p][k], dfs(i + , k) + cul(i - p));//这个是考虑在出现0之前的每一个1都不删去。
return dp[p][k];
} int main()
{
scanf("%d%d", &n, &m);
for (int i = ; i < n; i++) scanf("%1d", &a[i]);
memset(dp, -, sizeof(dp));
for(int i=;i<=n;i++)
{
if(dfs(,i)<=m)
{
printf("%d\n", i);
return ;
}
}
}

记忆化搜索 E - Loppinha, the boy who likes sopinha Gym - 101875E的更多相关文章

  1. Loppinha, the boy who likes sopinha Gym - 101875E (dp,记忆化搜索)

    https://vjudge.net/contest/299302#problem/E 题意:给出一个01 0101串,然后能量计算是连续的1就按1, 2, 3的能量加起来.然后给出起始的能量,求最少 ...

  2. [ACM_动态规划] 数字三角形(数塔)_递推_记忆化搜索

    1.直接用递归函数计算状态转移方程,效率十分低下,可以考虑用递推方法,其实就是“正着推导,逆着计算” #include<iostream> #include<algorithm> ...

  3. 【BZOJ-3895】取石子 记忆化搜索 + 博弈

    3895: 取石子 Time Limit: 1 Sec  Memory Limit: 512 MBSubmit: 263  Solved: 127[Submit][Status][Discuss] D ...

  4. hdu3555 Bomb (记忆化搜索 数位DP)

    http://acm.hdu.edu.cn/showproblem.php?pid=3555 Bomb Time Limit: 2000/1000 MS (Java/Others)    Memory ...

  5. zoj 3644(dp + 记忆化搜索)

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=4834 思路:dp[i][j]表示当前节点在i,分数为j的路径条数,从 ...

  6. loj 1044(dp+记忆化搜索)

    题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=26764 思路:dp[pos]表示0-pos这段字符串最少分割的回文 ...

  7. DP(记忆化搜索) + AC自动机 LA 4126 Password Suspects

    题目传送门 题意:训练指南P250 分析:DFS记忆化搜索,范围或者说是图是已知的字串构成的自动机图,那么用 | (1 << i)表示包含第i个字串,如果长度为len,且st == (1 ...

  8. HDU1978 记忆化搜索

    How many ways Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Tot ...

  9. bzoj4562: [Haoi2016]食物链--记忆化搜索

    这道题其实比较水,半个小时AC= =对于我这样的渣渣来说真是极大的鼓舞 题目大意:给出一个有向图,求入度为0的点到出度为0的点一共有多少条路 从入读为零的点进行记忆化搜索,搜到出度为零的点返回1 所有 ...

随机推荐

  1. yum 下载全量依赖 rpm 包及离线安装(终极解决方案)

    目录 简介 验证环境 查看依赖包 方案一(推荐):repotrack 方案二:yumdownloader 方案三:yum 的 downloadonly 插件 离线安装 rpm 参考资料 简介 通常生产 ...

  2. 数据结构与算法--二分搜索(binary search)

    前言 之前面试准备秋招,重新翻起了<编程之美>.在第三章节看到了一道关于二分搜索的讨论,觉得有许多细节是自己之前也没怎么特别注意地方,比如二分搜索的初始条件,转化.终止条件之类的. 问题 ...

  3. C++学习--编译优化

    常量折叠 把常量表达式的值求出来作为常量嵌在最终生成的代码中. 疑问:对于一个很复杂的常量表达式,编译器会算出结果再编译吗?亦或者是把这个表达式完全翻译成机器码,最终留给程序去解决? 分情况: 涉及的 ...

  4. Eureka源码分析

    源码流程图 先上图,不太清晰,抱歉 一.Eureka Server源码分析 从@EnableEurekaServer注解为入口,它是一个标记注解,点进去看 注解内容如下 /** * 激活Eureka服 ...

  5. Linux安装PHP的Redis扩展(已安装Redis)

    1.下载需要的php操作redis的扩展包 下载地址 http://pecl.php.net/package/redis    下载对应php版本,我的php版本为7.3,下载的是最新的版本5.0.2 ...

  6. Centos安装docker+vulhub搭建

    嫌弃平常因为复现搭建环境所带来的麻烦,所以打算用docker来管理搭建靶机 准备一个纯净的Centos系统虚拟机安装,这里已经安装好了就不演示怎么在虚拟机安装 安装Docker最基本的要求是Linux ...

  7. SpringCloud(七)超时、重试

    一.Ribbon(单独配置) 可以通过ribbon.xx来进行全局配置.也可以通过服务名.ribbon.xx来对指定服务配置 全局配置: ribbon: ConnectTimeout: 3000 #连 ...

  8. 20199308《Linux内核原理与分析》第十二周作业

    一.实验简介 竞态条件是指多个线程同时访问或者操作同一块数据,运行的结果依赖于不同线程访问数据的顺序.如果一个拥有root权限的程序存在竞态条件漏洞的话,攻击者可以通过运行一个平行线程与漏洞程序竞争, ...

  9. python学习18类4之静态类

    '''''''''类的静态方法.普通方法.类方法 静态方法: 用 @staticmethod 装饰的不带 self 参数的方法叫做静态方法,类的静态方法可以没有参数,可以直接使用类名调用. 普通方法: ...

  10. Winsock select server 与 client 示例代码

    参考 https://www.winsocketdotnetworkprogramming.com/winsock2programming/winsock2advancediomethod5.html ...