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的木条的数量,问使用这些木条最多能构成多少三角形. ...
随机推荐
- PTA 简单计算器(C语言)
模拟简单运算器的工作.假设计算器只能进行加减乘除运算,运算数和结果都是整数,四种运算符的优先级相同,按从左到右的顺序计算. 输入格式:输入在一行中给出一个四则运算算式,没有空格,且至少有一个操作数.遇 ...
- BDA3 Chapter 1 Probability and inference
1. uncertainty aleatoric uncertainty 偶然不确定性 epistemic uncertainty 认知不确定性 2. probability VS likelihoo ...
- SQL Server database – Error 3743
Database mirroring must be removed before you drop SQL Server database – Error 3743 If you try to dr ...
- 在 myeclipse 引入项目
1.进入 myeclipse 在界面空白处,右键,出现如下图所示 2.选择 Import...,弹出如下图所示界面 3.双击上图红框内的内容,弹出如下图所示界面,然后点击按钮“Browse...”,选 ...
- ZDialog关闭父窗口、往父窗口传值、刷新父窗口
关闭自己 //关闭自己 top.Dialog.close(); 关闭父窗口 //关闭父窗口 parentDialog.parentWindow.close() 往父窗口传值 //在本页面,调用父页面方 ...
- 1307E - Cow and Treats 二分 枚举边界 容斥
1307E - Cow and Treats 题意 有一排给定口味的草,并且给m头牛,每个牛都只吃一种口味的草,并且要吃给定数量个.现在可以安排牛从两边出发,方向向另一方向进发,每次路过符合他口味的草 ...
- Selenium3+python自动化007-警告框
警告框 alert = driver.switch_to.alert alert.text() alert.accpet() alert.dismiss() # 导selenium包 from sel ...
- jfinal 拦截器中判断是否为pjax请求
个人博客 地址:http://www.wenhaofan.com/article/20180926013919 public class PjaxInterceptor implements Inte ...
- const真有点烦
在C++中const代替#define的操作,当定义一个const时必须附一个值给它:const int size = 100;通常C++编译器不为const创建存储空间,相反它把这个定义保存在符号表 ...
- C++11 新用法
基于哈希的 map 和 set 简述 基于哈希的 map 和 set ,它们分别叫做 unordered_map, unordered_set .数据分布越平均,性能相较 map 和 set 来说提升 ...