博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
dp cf 20190615
阅读量:4638 次
发布时间:2019-06-09

本文共 1369 字,大约阅读时间需要 4 分钟。

这个不算是dp,就是一个思维题,好难想的思维题,看了题解才写出来的,

把点和边分开,如果一条边的两个点颜色不同就是特殊边,特殊边两边连的点就叫特殊点,

如果一个点的被计算的次数等于特殊边的次数,则说明它是我们所求的点

#include 
#include
#include
#include
#include
#include
#define inf 0x3f3f3f3fusing namespace std;typedef long long ll;const int maxn = 1e5 + 10;int num[maxn], a[maxn];pair
pii[maxn];int main(){ int n; scanf("%d", &n); for(int i=1;i
A

这个我觉得挺难的。。。。

网上题解,dp[i]来表示激活第i个位置,从前面往后推到第i个位置,这个塔存留下来的数量。

这个是线性的,后面那个位置都是由前面的那个位置推过来的,如果我们选了后面那个位置,如果后面的无法把前面的那个位置炸掉

那么只能不炸,或者由最后添加的那个点来炸掉之前你需要炸掉的区间。

这个题目简单,是因为可以转化成线性的,不过我觉得好难想。

#include 
#include
#include
#include
#include
#include
#define inf 0x3ff3f3fusing namespace std;const int maxn = 1e6 + 10;int d[maxn], dp[maxn];int main(){ int n; scanf("%d", &n); int mm = 0; for(int i=1;i<=n;i++) { int a; scanf("%d", &a); scanf("%d", &d[a]); mm = max(mm, a); } if (d[0]) dp[0] = 1; int res = min(n, n - dp[0]); for(int i=1;i<=mm;i++) { if (d[i] == 0) dp[i] = dp[i - 1]; else { if (d[i] >= i) dp[i] = 1; else { dp[i] = dp[i - 1 - d[i]] + 1; } } res = min(res, n - dp[i]); } printf("%d\n", res); return 0;}
A

 

转载于:https://www.cnblogs.com/EchoZQN/p/11026591.html

你可能感兴趣的文章
Hibernate二级缓存配置
查看>>
LoadRunner常用术语
查看>>
关于jedis2.4以上版本的连接池配置,及工具类
查看>>
记忆讲师石伟华微信公众号2017所有文章汇总(待更新)
查看>>
mechanize (1)
查看>>
FactoryBean
查看>>
Coolite动态加载CheckboxGroup,无法在后台中获取
查看>>
如何在我们项目中利用开源的图表(js chart)
查看>>
nfs服务器工作原理
查看>>
C3P0连接池工具类使用
查看>>
SVN常用命令备注
查看>>
孩子教育
查看>>
解决Cacti监控图像断断续续问题
查看>>
结构体的传参理解成员的存储方式
查看>>
python 进程与线程(理论部分)
查看>>
什么是API
查看>>
Java反射中method.isBridge() 桥接方法
查看>>
[shiro学习笔记]第二节 shiro与web融合实现一个简单的授权认证
查看>>
强名称程序集(strong name assembly)——为程序集赋予强名称
查看>>
1028. List Sorting (25)
查看>>