A. The Fair Nut and the Best Path

题意:给定有点权,有边权的树,让你选择一条链(也可以是只有一个点),使得点权之和-边权最大。

思路:裸的树形DP,我们用dp[i]表示i的子树里某个点到i这条链的最大值,然后用次大值更新答案即可。

具体的,每个dp[i]初始化=a[i];  对于i连出去的边-> (i,j),用它来更新答案,max(ans,dp[i]+dp[j]-len[i,j]);然后用它更新dp[i],max(dp[i],dp[i]-len[i,j]);

因为要的是最大值,肯定中途是大于等于0的,所以不会有中途油料耗尽的情况。
#include<bits/stdc++.h>
#define rep(i,a,b) for(int i=a;i<=b;i++)
#define ll long long
using namespace std;
const int maxn=;
int a[maxn],Laxt[maxn],Next[maxn],To[maxn],Len[maxn],cnt;
ll dp[maxn],ans;
void add(int u,int v,int c)
{
Next[++cnt]=Laxt[u]; Laxt[u]=cnt; To[cnt]=v; Len[cnt]=c;
}
void dfs(int u,int f)
{
dp[u]=a[u]; if(a[u]>ans) ans=a[u];
for(int i=Laxt[u];i;i=Next[i]){
int v=To[i]; if(v==f) continue;
dfs(v,u);
ans=max(ans,dp[u]+dp[v]-Len[i]);
dp[u]=max(dp[u],dp[v]-Len[i]+a[u]);
}
}
int main()
{
int N,u,v,c;
scanf("%d",&N);
rep(i,,N) scanf("%d",&a[i]);
rep(i,,N-){
scanf("%d%d%d",&u,&v,&c);
add(u,v,c); add(v,u,c);
}
dfs(,);
printf("%lld\n",ans);
return ;
}

B:B. The Fair Nut and Strings

题意:给定长度为N的由'a','b'组成的字符串S,T,满足S<=T,给出数字K,让你在[S,T]中找K个字符串,使得他们的value最大,value是指满足至少是K个字符串之一的前缀的字符串的个数。

思路:把'a'看成0,'b'看成1,那么[S,T]之间的个数num=T-S+1;我们先使K=min(K,num)。

题意转化一下:想象有深度为N的完全二叉树,左儿子是0,右儿子是1,分别把S和T划出来,由根到因子划成一条线,然后在这两条线之间找K条线,答案就是K条线路过的节点个数。显然第i层的贡献=min(K,2^i-边缘), 即除了最前面的线,和最后面的线,由上一层到下一层,节点数我们都可以*2;

#include<bits/stdc++.h>
#define rep(i,a,b) for(int i=a;i<=b;i++)
#define ll long long
using namespace std;
const int maxn=;
char a[maxn],b[maxn]; int N,K,x[maxn],y[maxn];
bool check()
{
rep(i,,N) x[i]=b[i]-a[i];
for(int i=N;i>=;i--){
while(x[i]<) x[i]+=,x[i-]-=;
}
int tK=K;
for(int i=N;i>=;i--){
if(!tK) break;
y[i]=tK%; tK/=;
}
for(int i=;i<=N;i++) {
if(x[i]>y[i]) return true;
if(x[i]<y[i]) return false;
}
return true;
}
void get()
{
K=; for(int i=N;i>=;i--){
if(x[i]) K+=(1LL<<(N-i));
}
}
int main()
{
int pos=; ll ans=; int tmp=;
scanf("%d%d",&N,&K);
scanf("%s%s",a+,b+);
if(!check()) get();
rep(i,,N){
if(a[i]==b[i]) pos=i,ans++;
else break;
}
rep(i,pos+,N) {
if(tmp<=K){
tmp=tmp*;
if(a[i]=='b') tmp--;
if(b[i]=='a') tmp--;
}
ans=ans+min(tmp,K);
}
printf("%lld\n",ans);
return ;
}

E. The Fair Nut and Rectangles

(这个题太亏了,WA6,原因是没有用double!...不然这一次要上150分的....我的橙名啊

题意:给出N个左下角是原点的矩形,每个矩形有自己的val,保证矩形之间没有包含关系,让你选择一些矩形,使得他们的面积并-val之和最大。

思路:我们先给矩形排序,然后就是DP了,dp[i]=max(dp[j]+(y[i]-y[j])*x[i]-val[i]);

明显的斜率优化,但是注意维护队首时要超过long long,注意使用double!

#include<bits/stdc++.h>
#define rep(i,a,b) for(int i=a;i<=b;i++)
#define ll long long
using namespace std;
const int maxn=;
struct in{
ll x,y,val;
bool friend operator <(in w,in v){
return w.x<v.x;
}
}s[maxn];
ll ans,dp[maxn],head,top,q[maxn];
ll DY(ll i)
{
return dp[i];
}
ll getans(ll i,ll j){
return dp[j]+(s[i].y-s[j].y)*s[i].x-s[i].val;
}
int main()
{
int N; scanf("%d",&N);
rep(i,,N) scanf("%lld%lld%lld",&s[i].x,&s[i].y,&s[i].val);
sort(s+,s+N+);
for(ll i=N;i>=;i--){
while(head<top&&getans(i,q[head])<=getans(i,q[head+])) head++;
dp[i]=getans(i,q[head]); ans=max(ans,dp[i]);
while(top>&&1.0*(DY(i)-DY(q[top]))*(s[i].y-s[q[top-]].y)>1.0*(DY(i)-DY(q[top-]))*(s[i].y-s[q[top]].y)) top--;
q[++top]=i;
}
printf("%lld\n",max(ans,0LL));
return ;
}

(过了AB,涨了75分...E要是过了的话...

哭,菜死了

CF1083(div1)的更多相关文章

  1. CodeForces-329C(div1):Graph Reconstruction(随机&构造)

    I have an undirected graph consisting of n nodes, numbered 1 through n. Each node has at most two in ...

  2. 深入浅出JavaScript之闭包(Closure)

    闭包(closure)是掌握Javascript从人门到深入一个非常重要的门槛,它是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现.下面写下我的学习笔记~ 闭包-无处不 ...

  3. CSS3与页面布局学习总结(八)——浏览器兼容与前端性能优化

    一.浏览器兼容 1.1.概要 世界上没有任何一个浏览器是一样的,同样的代码在不一样的浏览器上运行就存在兼容性问题.不同浏览器其内核亦不尽相同,相同内核的版本不同,相同版本的内核浏览器品牌不一样,各种运 ...

  4. CSS3与页面布局学习总结(七)——前端预处理技术(Less、Sass、CoffeeScript、TypeScript)

    CSS不像其它高级语言一样支持算术运算.变量.流程控制与面向对象特性,所以CSS样式较多时会引起一些问题,如修改复杂,冗余,某些别的语言很简单的功能实现不了等.而javascript则是一种半面向对象 ...

  5. CSS3与页面布局学习总结(六)——CSS3新特性(阴影、动画、渐变、变形、伪元素等)

    CSS3在CSS2.1的基础上新增加了许多属性,这里选择了较常用的一些功能与大家分享,帮助文档中有很详细的描述,可以在本文的示例中获得帮助文档. 一.阴影 1.1.文字阴影 text-shadow&l ...

  6. CSS3与页面布局学习总结(四)——页面布局大全

    一.负边距与浮动布局 1.1.负边距 所谓的负边距就是margin取负值的情况,如margin:-100px,margin:-100%.当一个元素与另一个元素margin取负值时将拉近距离.常见的功能 ...

  7. CSS3与页面布局学习总结(三)——BFC、定位、浮动、7种垂直居中方法

    一.BFC与IFC 1.1.BFC与IFC概要 BFC(Block Formatting Context)即“块级格式化上下文”, IFC(Inline Formatting Context)即行内格 ...

  8. CSS3与页面布局学习总结(二)——Box Model、边距折叠、内联与块标签、CSSReset

    一.盒子模型(Box Model) 盒子模型也有人称为框模型,HTML中的多数元素都会在浏览器中生成一个矩形的区域,每个区域包含四个组成部分,从外向内依次是:外边距(Margin).边框(Border ...

  9. HTML5 学习总结(一)——HTML5概要与新增标签

    一.HTML5概要 1.1.为什么需要HTML5 HTML4陈旧不能满足日益发展的互联网需要,特别是移动互联网.为了增强浏览器功能Flash被广泛使用,但安全与稳定堪忧,不适合在移动端使用(耗电.触摸 ...

随机推荐

  1. Codeforces 918D - MADMAX

    918D - MADMAX 思路: dp+记忆化搜索 状态:dp[i][j][w]表示先手在i节点,后手在j节点,这一轮的字母为w的结果,如果为true,则表示先手必赢,否则后手必赢. 状态转移:如果 ...

  2. Java IO流-File类

    2017-10-24 23:50:22 File类 File类:文件和目录路径名的抽象表示形式.该文件或者目录不一定真实存在. * 构造方法 File类有四种构造方法,主要采用的构造方法师第二种,也就 ...

  3. SVN同步版本库与网站目录

    如何创建SVN版本库及同步文件到WEB目录 来源:空谷 一 安装与配置SVN 1.安装subversion centos: yum install subversion ubuntu: apt-get ...

  4. English trip -- Review Unit1 Personal Information 个人信息

    1.重点内容进行自我介绍 What's you name? I'm Loki Where are you from? I'm Local, I'm Chengdu How old are you? t ...

  5. python 在 Windows Server 2008 r2 上 安装失败

    Microsoft Visual C++ 2008 Redistributable Package link (x86): https://www.microsoft.com/en-us/downlo ...

  6. 20170707xlVBA多区域拆分多表保持行高列宽

    Public Sub 多个区域拆分到多表() AppSettings On Error GoTo ErrHandler Dim StartTime, UsedTime As Variant Start ...

  7. 库: rspec/rspec-expectations matcher匹配器常用

    https://github.com/rspec/rspec-expectations https://relishapp.com/rspec/rspec-expectations/v/3-7/doc ...

  8. 49 DOM(2)

    一.value属性: input ,select 标签 ,textarea 标签中有value属性, 获取他们属性值的方法,先获取该元素ele,然后ele.value得到value值. <!DO ...

  9. cf-789A (思维)

    A. Anastasia and pebbles time limit per test 1 second memory limit per test 256 megabytes input stan ...

  10. 第 4 章—— C# 语言特性(《精通 ASP.NET MVC 5》)

    这里只提供各个特性的简单概括. C# 的完整指南可参阅<Introducing Visual C#>.深度了解 LINQ 可参考<Pro LINQ in C#> 4.1 准备示 ...