E. Pavel and Triangles dp+问题转化
E. Pavel and Triangles dp+问题转化
题意
给出n种线段,每种线段给出一定数量,其中每个线段都是
\(2^k\) 问最多能组成多少个三角形
思路
因为每个是\(2^k\)所以能组成三角形的线段要么是ABB要么是AAA 问题就转化成了凑ABB和BBB的组成怎么凑最多
怎么凑最多呢,可以注意到 ABB 和BBB 都有一对BB 所以我们优先凑对子 然后取和凑不到BBB的去组成三角形
这可能有点不好解释,从代码来说就是从后往前扫,先凑对子,如果当前的\(a[i]\mod(2)==1\)也就是凑完对子还有剩余,这个剩余不可能和后面的组成成三角形了,所以直接拿出一个对子来跟它凑成一个三角形,最后看有几个对子 最高的对子和最低的对子拿出一个可以凑成一个三角形,其实也就相等与每拿出3个线段都可以凑成一个三角形,所以只要duizi*2/3就知道其能凑成多少个三角形了
#include<bits/stdc++.h>
#define FOR(i,f_start,f_end) for(int i=f_start;i<=f_end;i++)
#define MS(arr,arr_value) memset(arr,arr_value,sizeof(arr))
#define F first
#define S second
#define pii pair<int ,int >
#define mkp make_pair
#define pb push_back
using namespace std;
typedef long long ll;
const int maxn = 3e5+4;
int a[maxn];
int main(){
int n;
cin>>n;
for(int i=0;i<n;i++)cin>>a[i];
ll ans=0,duizi=0;
for(int i=n-1;i>=0;i--){
duizi+=a[i]/2;
if(duizi&&a[i]%2){
duizi--;
ans++;
}
}
ans+=duizi*2/3;
cout<<ans<<endl;
return 0;
}
E. Pavel and Triangles dp+问题转化的更多相关文章
- Codeforces 1119E Pavel and Triangles (贪心)
Codeforces Global Round 2 题目链接: E. Pavel and Triangles Pavel has several sticks with lengths equal t ...
- Codeforces Global Round 2 E. Pavel and Triangles(思维+DP)
题目链接:https://codeforces.com/contest/1119/problem/E 题意:有n种长度的棍子,有a_i根2^i长度的棍子,问最多可以组成多少个三角形 题解:dp[i]表 ...
- Android 中像素px和dp的转化
在Android的布局文件中,往往使用dp作为控件的宽度和高度尺寸,但是在Java代码中,调用getWidth()方法获得的尺寸单位却是像素px,这两个单位有明显的区别:dp和屏幕的密度有关,而px与 ...
- Codeforces 79D - Password(状压 dp+差分转化)
Codeforces 题目传送门 & 洛谷题目传送门 一个远古场的 *2800,在现在看来大概 *2600 左右罢( 不过我写这篇题解的原因大概是因为这题教会了我一个套路罢( 首先注意到每次翻 ...
- hdu 4504 dp问题 转化能力不够 对状态的转移也是不够
威威猫系列故事——篮球梦 Time Limit: 300/100 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Total ...
- hdu5432Rikka with Array (数位dp+十进制转化为二进制)
Problem Description As we know, Rikka is poor at math. Yuta is worrying about this situation, so he ...
- Android dp px转化公式
// DisplayMetrics metrics = getResources().getDisplayMetrics(); // int statusBarHeight = (int) Math. ...
- 【CF1119E】Pavel and Triangles
题目大意:有 N 种长度的边,第 i 种长度为 \(2^i\),给定一些数量的这些边,问最多可以组合出多少种三角形. 题解:应该是用贪心求解,不过选择什么样的贪心策略很关键. 首先分析可知,两个较大边 ...
- cf-Global Round2-E. Pavel and Triangles
题目链接:http://codeforces.com/contest/1119/problem/E 题意:给定n个数a[i],分别表示长度为2i-1的木条的数量,问使用这些木条最多能构成多少三角形. ...
随机推荐
- PAT (Advanced Level) Practice 1035 Password (20 分)
To prepare for PAT, the judge sometimes has to generate random passwords for the users. The problem ...
- 双 leave 栈迁移的坑
目录 简介 问题 解决办法 简介 之前在复现自己做出来的题时,一样的思路发现拿不了 shell 了,后来发现是栈迁移的坑. 问题 假设 32 位系统中,漏洞函数可以任意写入 0x0000000 ...
- C#为配置文件加密的实现方法
利用ASP.NET注册工具ASPnet_regiis.exe注册IIS,该工具的名称为aspnet_regiis.exe,在32位机上,该工具存在于C:\WINDOWS\Microsoft.NET\F ...
- 精心收集java基础106条
Java基础 1.一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 一个Java源文件中可以定义多个类,但最多只能定义一个public的类,并且public ...
- 批量获取mysql数据库实例指定参数的值
需求:需要对比所有mysql数据库实例上面的指定参数配置情况,同时需要需要能看到如ip,端口,master or slave,毕竟主和从参数不一样还是有可能的. 说明:必须要有个数据库存储所有是数据库 ...
- docker镜像ubuntu封装jdk1.8.0【dockerfile】
github地址:https://github.com/laileman/Docker/Dockerfile/ubuntu-jdk1.8.0_172 1-目录结构 2- dockerfile内容 3- ...
- SVN的使用01
关于svn的使用以及TortoiseSVN常见操作 一.关于svn介绍 在介绍之前提一下,MyEclipse项目组的建立,以及源文件夹的创建. 新建的那一栏点击other 在搜索栏中搜索Java Wo ...
- pl/sql快速输入select * from等语句快捷键设置
1.工具-->首选项 2.编辑器-->编辑 3.定义快捷键 -- > 保存 4.快捷键+回车就可以出现
- 洛谷p1980 计数问题
题目描述 试计算在区间 111 到 nn n的所有整数中,数字x(0≤x≤9) x(0 ≤ x ≤ 9)x(0≤x≤9)共出现了多少次?例如,在 111到11 11 11中,即在 1,2,3,4,5, ...
- IntelliJ IDEA实用插件推荐
IntelliJ在业界被公认为优秀的Java开发平台之一,在智能代码助手.代码自动提示.重构.J2EE支持.代码审查. 创新的GUI设计等方面表现突出,并支持基于Android平台的程序开发.通过插件 ...