C - Function HDU - 6546 

由于a大于0,所有二次函数均是开口向上,而且x必须正整数。所以很自然想到先全部分配1.

然后逐个分配,由于二次函数f[i]-f[i-1]左边一定比右边更优,即i越小结果越小。

所以我们可以直接把F[I]-F[I-1]丢到优先队列里。每次让某一个二次函数的x+1,根据前面的分析,一定是队列首的二次函数加1 更优,因为队列里的所有数,将来只可能更大,不会变小。

然后把F[I+1]-F[I]丢回去即可。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int M=1e5+7;
struct node
{ll f,x,id;bool operator <(const node &r)const{return f>r.f;}
}p;
priority_queue<node>q;//逆序规则,变成小根堆
int a[M],b[M],c[M];
ll s(int k,int x)
{return 1LL*a[k]*x*x+1LL*b[k]*x+c[k];
}
int main()
{int n,m;cin>>n>>m;ll ans=0;for(int i=1;i<=n;i++)cin>>a[i]>>b[i]>>c[i],ans+=s(i,1),q.push(node{s(i,2)-s(i,1),2,i});m-=n;while(m){node tp=q.top();q.pop();ans+=tp.f;q.push(node{s(tp.id,tp.x+1)-s(tp.id,tp.x),tp.x+1,tp.id});m--;}cout<<ans<<endl;return 0;
}

D - Tree

HDU - 6547

如果不在树上,这就是一道势能线段树的裸题。

在树上的话,树剖一下就行了。

两个知识点的混合板子题

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define ls o*2
#define rs o*2+1
const int maxn=2e5+7;
ll w[maxn],wt[maxn];
struct node
{int v,nxt;
}e[maxn];
int tot,head[maxn];
void add(int x,int y)
{e[++tot].nxt=head[x];e[tot].v=y;head[x]=tot;
}
int son[maxn],id[maxn],fa[maxn],cnt,dep[maxn],siz[maxn],top[maxn];
int n,m,r,q;
void init()
{tot=0,cnt=0;
}
ll tr[maxn<<2],tg[maxn<<2];
void bd(int o,int l,int r)
{if(l==r){tr[o]=wt[l];if(tg[o]==1||tg[o]==0)tg[o]=1;return;}int m=(l+r)/2;bd(ls,l,m);bd(rs,m+1,r);tr[o]=tr[ls]+tr[rs];
}
void up(int o,int l,int r,int x,int y)
{if(l==r){tr[o]=sqrt(1.0*tr[o]);if(tr[o]==1||tr[o]==0)tg[o]=1;return ;}int m=(l+r)/2;if(x<=m)up(ls,l,m,x,y);if(y>m)up(rs,m+1,r,x,y);tr[o]=tr[ls]+tr[rs];if(tg[ls]&&tg[rs])tg[o]=1;
}
ll qu(int o,int l,int r,int x,int  y)
{if(x<=l&&r<=y){return tr[o];}int m=(l+r)/2;ll ans=0;if(x<=m)ans+=qu(ls,l,m,x,y);if(y>m)ans+=qu(rs,m+1,r,x,y);return ans;
}
//
void dfs1(int u,int f,int deep)
{dep[u]=deep;fa[u]=f;siz[u]=1;int maxson=-1;for(int i=head[u];i;i=e[i].nxt){int v=e[i].v;if(v==f)continue;dfs1(v,u,deep+1);siz[u]+=siz[v];if(siz[v]>maxson){son[u]=v;maxson=siz[v];}}
}
void dfs2(int u,int topf)
{id[u]=++cnt;wt[cnt]=w[u];top[u]=topf;if(!son[u])return ;dfs2(son[u],topf);for(int i=head[u];i;i=e[i].nxt){int v=e[i].v;if(v==fa[u]||v==son[u])continue;dfs2(v,v);}
}
void updrange(int x,int y)
{while(top[x]!=top[y]){if(dep[x]<dep[y])swap(x,y);up(1,1,n,id[top[x]],id[x]);x=fa[top[x]];}if(dep[x]>dep[y])swap(x,y);up(1,1,n,id[x],id[y]);
}
ll qrange(int x,int y)
{ll ans=0;while(top[x]!=top[y]){if(dep[top[x]]<dep[top[y]])swap(x,y);ans+=qu(1,1,n,id[top[x]],id[x]);x=fa[top[x]];}if(dep[x]>dep[y])swap(x,y);ans+=qu(1,1,n,id[x],id[y]);return ans;
}
int main()
{int u,v;init();cin>>n>>q;for(int i=1;i<=n;i++)scanf("%d",&w[i]);for(int i=1;i<=n-1;i++)scanf("%d%d",&u,&v),add(u,v),add(v,u);r=1;dfs1(r,-1,1);dfs2(r,r);bd(1,1,n);for(int i=1;i<=q;i++){int opt,u,v,z;scanf("%d%d%d",&opt,&u,&v);if(opt==0){updrange(u,v);}else{printf("%lld\n",qrange(u,v));}}
}

F - String

HDU - 6549

f[i][j][k]表示: 处理到第i位,使当前位修改为 'a'+j ,且已经出现了k段的最小修改次数。

由于无后效性,我们直接线性DP从前往后推。

比较简单,难点是会自然想到26^2*10*n的做法。

我们让f[i][26][k]表示: 处理到第i位,使当前位修改为任意字符 ,且已经出现了k段的最小修改次数。

这样就能利用前面已经处理过的信息了 省去一维枚举字符。

转移比较简单,看看就差不多了

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
//typedef __int128 LL;
//typedef unsigned long long ull;
//#define F first
//#define S second
typedef long double ld;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;
typedef pair<ld,ld> pdd;
const ld PI=acos(-1);
const ld eps=1e-9;
//unordered_map<int,int>mp;
#define ls (o<<1)
#define rs (o<<1|1)
#define pb push_back
//#define a(i,j) a[(i)*(m+2)+(j)]  //m是矩阵的列数
//pop_back()
const int seed=131;
const int M = 2e5+7;
/*int head[M],cnt;
struct EDGE{int to,nxt,val;}ee[M];
void add(int x,int y,int z){ee[++cnt].nxt=head[x],ee[cnt].to=y,ee[cnt].val=z,head[x]=cnt;}*/
int f[M][27][11];
char s[M];
int main()
{ios::sync_with_stdio(false);cin.tie(0);int n,l,z;cin>>n>>l>>z;cin>>s;memset(f,127,sizeof(f));for(int i=0;i<=25;i++)f[0][i][1]=(s[0]=='a'+i?0:1);f[0][26][1]=0;for(int i=1;i<n;i++){for(int j=0;j<25;j++){for(int k=1;k<=z;k++){if(s[i]=='a'+j)f[i][j][k]=f[i-1][j][k];if(i-l>0){f[i][j][k]=min(f[i][j][k],f[i-l][26][k-1]+1);f[i][j][k]=min(f[i][j][k],f[i-l][j][k]+1);}else{f[i][j][k]=min(f[i][j][k],f[0][26][k-1]+1);f[i][j][k]=min(f[i][j][k],f[0][j][k]+1);}//  cout<<i<<" "<<j<<" "<<k<<" "<<f[i][j][k]<<endl;f[i][26][k]=min(f[i][26][k],f[i][j][k]);}}}   cout<<f[n-1][26][z]<<endl;return 0;
}

2019CCPC女生赛相关推荐

  1. 2019CCPC女生赛总结

    赛后感言 这大概真的是我最后一场ACM现场赛了吧,每一次参加现场赛后都是难过和遗憾-(文末附上照片) 前几天刚毕业答辩结束,明天就要上班了.昨天来到南京参加CCPC女生赛,今天上午8:30-9:30热 ...

  2. 2019CCPC江苏南京女生赛 | 总结

    今年的女生专场在江苏南京晓庄学院举办 (夸一波 主办方周老师好可爱~~ 桌牌设计的很好看 志愿者小姐姐也很热心~ 第一次见到了wls.谈姐姐等巨巨 很难得在开头放队友友链 因为这一篇说的实在是太废话了 ...

  3. 武汉工程大学第一届程序设计女生赛(牛客contest 4746)解题报告 Apare_xzc

    武汉工程大学第一届程序设计女生赛解题报告 xzc 2020.3.8 比赛链接:武汉工程大学第一届程序设计女生赛 A. Multiplication (101/861) 分析: 问x平方几次后就会> ...

  4. 2022CCPC女生赛 | 总结

    目录 1.做题情况 2.一些感想 1.做题情况 我们队A了三道题,罚时比较长,应该是吊在铜尾这个位置 2.一些感想 这次比赛真的慌慌张张,从最开始的队友电脑登不进去,到我的电脑(唯一一台能打代码的电脑 ...

  5. 2021CCPC女生赛

    2021CCPC女生赛 距离女生赛过去已经一个月了,竟然没有补题和整理过.每天要看论文做实验还要准备一个又一个的考试,时间总是不够用的,状态还是依然的差. 现场大概5题银首到铜尾了. 金牌的话要做出更 ...

  6. 2021ccpc女生赛 BCF题解

    2021ccpc女生赛 C (状压DP) 题意:给定一张图,每个节点隶属于一个公司,会有节点属于相同的公司,节点都有一个权值,问从节点1出发,到达第iii个点时能得到的最大价值是多少. 每个公司的红包 ...

  7. 2019 CCPC 女生赛

    题目链接 Rank:67 / 297  (不过榜单好像不是现场的榜单) 这次韩巍有课没来,我和程磊两个人做的,这次做的是女生赛,沃老师出的题,题面都是中文题,比较友好,题目都比较简单,都是思维题,一共 ...

  8. 2017 女生赛总结

    第一次参加女生赛的时候还是个20天速成萌新,拼拼凑凑组了一支队去杭电参赛.只做了2道题,惨列倒数第五名-- 一年过去,加入了ACM俱乐部,被俱乐部里的大佬们虐了一年以后重新参加这个比赛. 拿了铜牌,虽 ...

  9. 第二届CCPC女生赛 粗略题解(要做重现的不要看哦)

    因为再不全力投入华为软件精英挑战赛就来不及了! 而且直播时讲过题了,所以只能粗略写一个题解,希望大家包涵>.< 基本可以参考代码,可以画图模拟加思考脑补其原理与过程23333~~ 会后续有 ...

最新文章

  1. nvGRAPH原理概述
  2. NSArray、NSDictionary、NSString存储、删改、遍历
  3. 自动化日志收集及分析在支付宝 App 内的演进
  4. C++基础与深度解析第七章:深入IO
  5. windows-7:系统利用终端cmd命令关机
  6. 畅谈云原生(上):云原生应用应该是什么样子?
  7. java 数字 下划线_数字文字中的下划线– Java 7功能
  8. 论文中的误差图绘制(图中图)
  9. 百度直达号选错了对手 阿里腾讯还太嫩 干掉美团更直接
  10. 定义c++对象(c++可以完成面向对象编程)(正方体的实例应用);
  11. 教程 | 如何用思维导图做自我介绍
  12. CVPR 2021 目标检测论文大盘点(65篇论文)
  13. 基于阿里云CentOS进行Docker尝试
  14. 如何给PDF文件添加水印?PDF免费添加水印教程来了
  15. 简单有效解决onenote无法设置或修改默认的英文字体“Calibri”(简单实用)
  16. em算法 图像模糊检测_基于EM算法的眼底OCT图像反卷积去模糊技术
  17. 2021 ICCV论文分享 | 遮挡边界检测
  18. TVbox带会员带推广版本
  19. GCN变体-graphSAGE
  20. css如何在下拉框添加倒三角,CSS给选中元素增加倒三角形(示例代码)

热门文章

  1. 英语知识点整理day08-谚语学习(A字母开头)
  2. 如何在Google Chrome浏览器中更改主页
  3. c语言程序设计 链表,c语言程序设计基于链表的学生成绩管理系统.doc
  4. Windows 7 Ultimate with SP1(x64) MSDN 官方简体中文旗舰版原版
  5. ASCII Art@字符画LOGO字符生成@Font Generator
  6. Prometheus 踩坑集锦
  7. 平面设计和ui设计的区别:ui设计前景怎样
  8. php防止伪造数据,PHP_php防止伪造的数据从URL提交方法,针对伪造的数据从URL提交的情 - phpStudy...
  9. BZOJ 4657: tower【路径最小割约束】
  10. 大星星学物联网概览篇-移动通信网络WWAN