APIO2015&2014题解

APIO2014年竞赛试题中文版 2014年亚太地区信息学奥林匹克竞赛(Asia-Pacific Informatics Olympiad, APIO)试题中文版 立即下载

传送门:似乎uoj都有

思路:

APIO2015:

巴厘岛的雕塑:

看到位运算,又要求结果最小,最外层肯定是个从高位到低位的按位贪心

这里有两个部分分,

task1:N<=100,1<=A<=B<=N

task2:N<=2000,A=1,1<=B<=N


先考虑task1

令sum[i]表示雕塑权值的前缀和

假设我们考虑到了第bit位

那么我们怎么知道在前面位数满足要求的前提下,当前位能否是0

DP即可

设f[i][j]表示前i个雕塑,有j个组,并且前面位数满足要求,当前位是否能为0

那么f[i][j]|=f[k][j-1]&&((nowans|(sum[i]-sum[j]))==nowans)

为了方便判断,我们先把nowans后面的位都赋成1


最后如果f[n][A--B]中有为1的,则该位可取0,继续下一位的DP

复杂度O(n^3*log(M))


对于task2,n变大了,但是有了一个限制条件,A=1

这就是说,组数没有了下限,只有上限

我们可以转变状态设计,令g[i]表示前i个,在满足前面位数满足要求的前提下,最少要多少组

转移更简单了,g[i]=min(g[j]+1)     ((nowans|(sum[i]-sum[j]))==nowans)

最后判断g[n]是否<=B即可


#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
const int maxn=2010;
typedef long long ll;
using namespace std;
int n,A,B,a[maxn],len,g[maxn];ll sum[maxn],pw[50];bool f[105][105];

void work1(){
	ll ans=0;
	for (int bit=len;bit>=0;bit--){
		ans+=(pw[bit]-1);
		memset(f,0,sizeof(f)),f[0][0]=1;
		for (int i=1;i<=n;i++)
			for (int j=1;j<=i;j++){
				for (int k=0;k<i;k++){
					ll s=sum[i]-sum[k];
					f[i][j]|=(f[k][j-1]&&((s|ans)==ans));
					if (f[i][j]) break;
				}
			}
		bool can=0;
		for (int i=A;i<=B;i++) if (f[n][i]){can=1;break;}
		if (!can) ans++;
		else ans-=(pw[bit]-1);
	}
	printf("%lld\n",ans);
}

void work2(){
	ll ans=0;
	for (int bit=len;bit>=0;bit--){
		ans+=(pw[bit]-1);
		memset(g,63,sizeof(g)),g[0]=0;
		for (int i=1;i<=n;i++)
			for (int j=0;j<i;j++)
				if (((sum[i]-sum[j])|ans)==ans)
					g[i]=min(g[i],g[j]+1);
		if (g[n]<=B) ans-=(pw[bit]-1);
		else ans++;
	}
	printf("%lld\n",ans);
}

int main(){
	scanf("%d%d%d",&n,&A,&B);
	for (int i=1;i<=n;i++) scanf("%d",&a[i]),sum[i]=sum[i-1]+a[i];
	for (ll tmp=1;tmp<=sum[n];tmp<<=1) len++;
	pw[0]=1;for (int i=1;i<=len;i++) pw[i]=pw[i-1]<<1;
	if (A==1) work2();
	else work1();
	return 0;
}

雅加达的摩天大楼

思路:显然是一个最短路模型

首先点数为O(n+m),边数为O(n*m)的建图很好想

doge在一边,楼在一边

每只doge向它所在的楼连权值为0的双向边,向所有它能到的楼连权值为步数的单向边,跑一遍最短路即可

然后我们发现,每个doge连出去的边是n/p的,那么p很大时我们可以用这种暴力连边

 

那p很小时呢?

每栋楼多建出p个辅助点,相当于一栋楼的很多层,i层代表的意义是它能跳到x-i和x+i栋楼

我们发现一只doge的步长是固定的

那么这只doge只能跳到它能跳到的楼的对应层

到楼底才可以见到这栋楼的狗


因为卡空间,p的分界线设为100即可。

spfa在uoj会被卡........

bzoj可过

#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
const int maxb=105,maxn=30010*105,maxm=maxn*5;
using namespace std;
int n,m,b[30010],p[30010],dis[maxn],pre[maxm],now[maxn],son[maxm],val[maxm],tot,sz=100,S,T,q[maxn+10],head,tail,inf;bool bo[maxn];
int id(int a,int b){return a*n+b;}
void add(int a,int b,int c){pre[++tot]=now[a],now[a]=tot,son[tot]=b,val[tot]=c;}

void spfa(){
	memset(dis,63,sizeof(dis)),inf=dis[0];
	dis[S]=head=0,bo[S]=1,q[tail=1]=S;
	while (head!=tail){
		if (++head>maxn) head=1;
		int x=q[head];
		//printf("%d %d\n",x,dis[x]);
		for (int y=now[x];y;y=pre[y])
			if (dis[son[y]]>dis[x]+val[y]){
				dis[son[y]]=dis[x]+val[y];
				if (!bo[son[y]]){
					if (++tail>maxn) tail=1;
					q[tail]=son[y],bo[son[y]]=1;
				}
			}
		bo[x]=0;
	}
	printf("%d\n",dis[T]==inf?-1:dis[T]);
}

int main(){
	//freopen("test.in","r",stdin);freopen("test.out","w",stdout);
	scanf("%d%d",&n,&m),sz=min((int)sqrt(n),100);
	for (int i=1;i<=m;i++) scanf("%d%d",&b[i],&p[i]),b[i]++;
	S=b[1],T=b[2];
	for (int i=1;i<=sz;i++) for (int j=1;j<=n;j++) add(id(i,j),j,0);//到了这栋楼,才可以下楼换狗
	for (int i=1;i<=sz;i++)
		for (int j=1;j<=n-i;j++){
			int x=id(i,j),y=id(i,j+i);
			add(x,y,1),add(y,x,1);//楼与楼对应层连边
		}
	for (int i=1;i<=m;i++){
		if (p[i]<=sz) add(b[i],id(p[i],b[i]),0);//上楼,限制步长
		else{
			for (int j=1;b[i]+j*p[i]<=n;j++) add(b[i],b[i]+j*p[i],j);//暴力连边
			for (int j=1;b[i]-j*p[i]>=1;j++) add(b[i],b[i]-j*p[i],j);
		}
	}
	spfa();
	return 0;
}

巴邻旁之桥

三分套三分秒切此题

虽然没有精度误差,但时间上因为是两个log,log还特别大,三分已被卡飞了


我们需要更科学的方法

首先家和单位在同一侧的,直接计算答案,你们要桥有什么用啊

注意桥也有1的长度

k==1时,建在所有家和单位的中位数处即可

k==2时,可以发现对于每个人,走离家和单位的中点更近的桥不会更差(可能相同)

那么把每个人按家和单位的中点排序后,一定存在一个分解点使得中点在左边的走左边的桥,中点在右边的走右边的桥

那么左右就变成了两个K=1的情况

分别找到中位数,修桥即可


实现上用两个权值线段树

动态维护两段的中位数即可

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
typedef long long ll;
#define abs(a) (a>0?a:-(a))
const int maxn=200010;
using namespace std;
struct data{
	int l,r,idl,idr,v;
	inline ll dis(ll bri){return abs(l-bri)+abs(r-bri);}
}seq[maxn];
int n,K,a[maxn],tot,cnt,b[maxn];char c1[2],c2[2];ll ans;
bool cmp(data a,data b){return a.v<b.v;}

struct Tseg{
	#define ls (p<<1)
	#define rs ((p<<1)|1)
	#define mid ((l+r)>>1)
	int val[maxn<<2];
	void modify(int p,int l,int r,int x,int v){
		if (l==r){val[p]+=v;return;}
		//printf("%d %d %d %d %d\n",p,l,r,x,v);
		if (x<=mid) modify(ls,l,mid,x,v);
		else modify(rs,mid+1,r,x,v);
		val[p]=val[ls]+val[rs];
	}
	void modify(int x,int v){modify(1,1,tot,x,v);}
	int query(int p,int l,int r,int rk){
		if (l==r) return l;
		if (rk<=val[ls]) return query(ls,l,mid,rk);
		else return query(rs,mid+1,r,rk-val[ls]);
	}
	int query(int rk){return query(1,1,tot,rk);}
	#undef mid
	#undef ls
	#undef rs
}T[2];

void work1(){
	for (int i=1,l,r;i<=n;i++){
		scanf("%s%d%s%d",c1,&l,c2,&r);
		if (l>r) swap(l,r);
		if (c1[0]==c2[0]) ans+=(r-l);
		else a[++tot]=l,a[++tot]=r,ans++;
		//printf("%d %d\n",l,r);
	}
	sort(a+1,a+1+tot);
	int mid=a[tot/2];
	for (int i=1;i<=tot;i++) ans+=abs(a[i]-mid);
	printf("%lld\n",ans);
}

void prework(){
	for (int i=1;i<=cnt;i++) b[++tot]=seq[i].l,b[++tot]=seq[i].r;
	sort(b+1,b+1+tot);
	for (int i=1;i<=cnt;i++){
		seq[i].idl=lower_bound(b+1,b+1+tot,seq[i].l)-b;
		seq[i].idr=lower_bound(b+1,b+1+tot,seq[i].r)-b;
	}
}

ll getans(){
	ll ans0=0,ans1=0,mins=1e9+7,mid0=0,mid1;
	prework();
	for (int i=1;i<=cnt;i++) T[1].modify(seq[i].idl,1),T[1].modify(seq[i].idr,1),seq[i].v=seq[i].l+seq[i].r;
	sort(seq+1,seq+1+cnt,cmp),mid1=b[cnt+1];
	for (int i=1;i<=cnt;i++) ans1+=seq[i].dis(mid1);mins=ans1;
	//for (int i=1;i<=cnt;i++) printf("l=%d r=%d v=%d\n",seq[i].l,seq[i].r,seq[i].v);
	//printf("mins=%lld mid0=%lld mid1=%lld\n",mins,mid0,mid1);
	for (int i=1;i<=cnt;i++){
		ans1-=seq[i].dis(mid1);
		T[0].modify(seq[i].idl,+1),T[0].modify(seq[i].idr,+1),mid0=b[T[0].query(i)];
		T[1].modify(seq[i].idl,-1),T[1].modify(seq[i].idr,-1),mid1=b[T[1].query(cnt-i+1)];
		ans0+=seq[i].dis(mid0);
		mins=min(mins,ans0+ans1);
	}
	//printf("%lld\n",mins);
	return mins;
}

void work2(){
	for (int i=1,l,r;i<=n;i++){
		scanf("%s%d%s%d",c1,&l,c2,&r);
		if (l>r) swap(l,r);
		if (c1[0]==c2[0]) ans+=(r-l);
		else ans++,seq[++cnt]=(data){l,r};
	}
	printf("%lld\n",ans+getans());
}

int main(){
	scanf("%d%d",&K,&n);
	if (K==1) work1();else work2();
	return 0;
}

APIO2014:

连珠线:

首先我们可以发现,定根后,蓝线一定是fa[i],i,son[i]的形式

那么我们枚举根,设f[i][0/1]分别表示i子树,i不是蓝线中点,是蓝线中点的最大权值

那么f[i][0]=Σmax(f[j][0],f[j][1]+val[i,j]) j是i的儿子


f[i][1]=f[i][0]+max(f[j][0]+val[i,j]-max(f[j][0],f[j][1]+val[i,j]))

表示可以选择一个连向自己的,但是要减去之前统计的


但是枚举根肯定不行

考虑怎样换根

我们发现换根时只有这两个点的f值变化,

在第一遍DP时记录f[i][0/1]转移式后面那一堆max(f[j][0]+val[i,j]-max(f[j][0],f[j][1]+val[i,j]))的最大和次大

那么我们把这两个点的值重新转移一遍

设原根是x,现在的根是y

现在y咸鱼翻身啦,它不是x的儿子了

从x中去除y的贡献,之所以要记录次大,是因为y正好为x儿子中的最大时,x此时只能由次大来转移

然后把x当做y的一个新儿子,转移一下即可

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
const int maxn=200010,maxm=maxn<<1,inf=2e9+7;
using namespace std;
int n,pre[maxm],now[maxn],son[maxm],tot,val[maxm],f[maxn][2],maxs[maxn],sec[maxn],deg[maxn],ans;
void add(int a,int b,int c){pre[++tot]=now[a],now[a]=tot,son[tot]=b,val[tot]=c,deg[b]++;}

void read(int &x){
	char ch;
	for (ch=getchar();!isdigit(ch);ch=getchar());
	for (x=0;isdigit(ch);ch=getchar()) x=x*10+ch-'0'; 
}

void dfs(int x,int fa){
	if (deg[x]==1&&fa){
		f[x][0]=0,f[x][1]=-inf;
		return;
	}
	maxs[x]=sec[x]=-inf;
	for (int y=now[x];y;y=pre[y])
		if(son[y]!=fa){
			dfs(son[y],x);
			int tmp=max(f[son[y]][0],f[son[y]][1]+val[y]);
			f[x][0]+=tmp,f[x][1]+=tmp;
			sec[x]=max(sec[x],f[son[y]][0]+val[y]-tmp);
			if (sec[x]>maxs[x]) swap(sec[x],maxs[x]);
		}
	f[x][1]+=maxs[x];
}

void moveto(int x,int fa){
	ans=max(ans,f[x][0]);
	for (int y=now[x];y;y=pre[y])
		if (son[y]!=fa){
			int tmp=max(f[son[y]][0],f[son[y]][1]+val[y]),f0=f[x][0],f1=f[x][1];
			if (f[son[y]][0]+val[y]-tmp==maxs[x])
				f0-=tmp,f1=f1-tmp-maxs[x]+sec[x];
			else 
				f0-=tmp,f1=f1-tmp;
			int vx=max(f0,f1+val[y]);
			f[son[y]][0]+=vx,f[son[y]][1]+=vx;
			f[son[y]][1]-=maxs[son[y]];
			int delta=f0+val[y]-vx;
			sec[son[y]]=max(sec[son[y]],delta);
			if (sec[son[y]]>maxs[son[y]]) swap(sec[son[y]],maxs[son[y]]);
			f[son[y]][1]+=maxs[son[y]];
			moveto(son[y],x);
		}
}

int main(){
	scanf("%d",&n);
	for (int i=1,x,y,z;i<n;i++)
		read(x),read(y),read(z),add(x,y,z),add(y,x,z);
	dfs(1,0),moveto(1,0),printf("%d\n",ans);
	return 0;
}

回文串:

见:http://blog.youkuaiyun.com/thy_asdf/article/details/47615439

序列分割:

化一化式子,就发现是比较裸的斜率优化了

#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
const int maxn=100010;
using namespace std;
int n,k,cnt,a[maxn],i,q[maxn],now=0,pre=1;
ll f[maxn][2],sum[maxn];
double slope(int i,int j){return !(sum[i]-sum[j])?1e9:1.0*((f[i][pre]-sum[i]*sum[i])-(f[j][pre]-sum[j]*sum[j]))/(double)(sum[i]-sum[j]);}

void work(int x){
	int head=1,tail=0;
	for (int i=1;i<=n;i++){
//		printf("%I64d %d\n",sum[i],head);
		while (head<tail&&slope(q[head],q[head+1])>-sum[i]) head++;
		int j=q[head];/*printf("j%d\n",q[head]);*/f[i][now]=f[j][pre]+(sum[i]-sum[j])*sum[j];
//		printf("%I64d\n",sum[i]-sum[j]);
		while (head<tail&&slope(q[tail],q[tail-1])<slope(q[tail],i)) tail--;
//		printf("%d\n",tail);
		q[++tail]=i;
	}
	now^=1,pre^=1;
}

int main(){
	scanf("%d%d",&n,&k);
	for (i=1;i<=n;i++) scanf("%d",&a[i]),sum[i]=sum[i-1]+a[i];
	for (i=1;i<=k;i++) work(i);
	printf("%lld\n",f[n][pre]);
	return 0;
}



APIO2014年竞赛试题测试数据 2014年亚太地区信息学奥林匹克竞赛(Asia-Pacific Informatics Olympiad, APIO)试题测试数据 立即下载

相关推荐

APIO2015.zip

APIO2015 数据 题面自己搜,1.巴厘岛的雕塑 N个数,分成连续的A-B个组,让每个组的和或起来最小,求最小值。 对于Task1 n&lt;=100   由于涉及到位运算,所以很容易想到按二进制位来做。要让答案最小,显然要从二进制高位到低位判断,能取0就取0。

历年noip,apio题目考点

年份 题目名称 考察点 考查内容 难度 1998 Factor 高精度运算 高精度运算 ★ 1998 Three 枚举 枚举 ☆ 1998 Power 数学(进制转换) 数学(进制转换) ★★ 1999 旅行家的预算 动态规划或贪心 动态规划或贪心 ★★☆ 1999 Cantor表 模拟或数学 模拟或数

lengxuenong的博客 4041

APIO2015年竞赛试题中文版

2015年亚太地区信息学奥林匹克竞赛(Asia-Pacific Informatics Olympiad, APIO)试题中文版

APIO 2014 连珠线 题解

题目传送门 题目大意: 有一个游戏,一开始有一个点,每次可以用一条红线将一个新点连向旧点,或者是断掉一条红线然后用一个新点和两条蓝线连接原先红线连接的两个点。现在给出一棵树,是某次游戏的最终结果,问可能的情况中蓝线的最大长度是多少。 题解 既然是一棵树,很容易想到去 dpdpdp。我们发现往里面加点其实不会改变树中的父子关系,也就是说,只要我们确定了树的根是谁,就很容易 dpdpdp 了。 不妨将...

a_forever_dream的博客 423

数据产品需求文档(PRD)怎么写?阿里P8分享的模板+5个避坑点

作用:记录文档的版本、作者、评审信息,避免“文档混乱”。填写规范字段说明示例文档名称清晰反映产品名称,如“用户行为分析平台PRD”用户行为分析平台PRD_V1.0文档版本用“版本号+日期”,如V1.0_20240301编写人数据产品经理姓名+联系方式张三(138-XXXX-XXXX)评审人员业务负责人、开发经理、数据分析师、运维负责人李四(业务)、王五(开发)、赵六(数据)、周七(运维)评审时间评审日期2024-03-05评审意见。

架构师的AI之路,分享AI应用开发架构的学习与实践。 1571

C#粘包和分包问题及解决方法

一:通过图解法来描述一下分包和粘包,这样客户更清晰直观的了解:  下面对上面的图进行解释:  1.正常情况:如果Socket Client 发送的数据包,在Socket Server端也是一个一个完整接收的,那个就不会出现粘包和分包情况,数据正常读取。  2.粘包情况:Socket Client发送的数据包,在客户端发送和服务器接收的情况下都有可能发送,因为客户端发送的数据都是发送的一个缓冲...

weixin_42033401的博客 7767

[APIO2014]连珠线

题目链接 分析 首先考虑朴素算法。 可以枚举每个节点作为根,这样的话连接的树的形态就确定了。 应为我们可以知道每个点只可能是一个蓝边的中点,不难想到设一个DP状态表示节点是否为蓝边的中点,设 dp[i][0]dp[i][0]dp[i][0] 表示不是蓝边的中点, dp[i][1]dp[i][1]dp[i][1] 表示是蓝边的中点。因为每个蓝边的线段长都是两个线段,所以说对于一个是蓝边中点的节点,那么会想到是 son−&gt;x−&gt;fatherson-&gt;x-&gt;fatherson−&gt;x−

cqbz_luoyiran的博客 385

Enterprise Architect 中文经典教程

本文使用到的EA工程文件下载 一、Enterprise Architect简介 Enterprise Architect是一个对于软件系统开发有着极好支持的CASE软件(Computer Aided Software Engineering)。EA不同于普通的UML画图工具(如VISIO),它将支撑系统开发的全过程。在需求分析阶段,系统分析与设计阶段,系统开发及部署等方面有着强大的支持,...

2万+

2025.5.12 APIO 模拟赛总结

2025.5.12 APIO 模拟赛总结

weixin_55851276的博客 978

obisidian插件之【templater】模板的中文说明书

Templater 是一种模板语言,可让您将变量和函数结果插入到笔记中。它还允许您执行操作这些变量和函数的 JavaScript 代码。使用 Templater,您将能够创建强大的模板来自动执行手动任务。

m0_55795604的博客 1万+

基于STM32+华为云设计的智慧农业灌溉系统(2023升级版)(158)

本项目设计一种基于STM32的智慧农业监测系统。该系统能够检测空气温度、湿度、光强度和土壤湿度等关键指标,并自动调节浇水量,实现作物生长环境的精细化管理。同时,本项目还支持本地LCD屏幕数据显示和通过ESP8266上传数据到华为云物联网平台,同时搭建流媒体服务器实现摄像头远程监控。最重要的是,本项目将利用Qt开发Android手机APP,使用户可以远程查看监测情况,了解农作物生成情况。

1万+

【APIO 练习题】Lock Puzzle

题意 你有一个长度为 $n$ 的字符串,你需要经过若干次操作将其变成目标串 $n'$。 一次操作:选择串 $n$ 的一个后缀,将其翻转,并放到串 $n$ 的最前面。 请你输出任意一种方案。当然,你达到目标串的操作次数越少,得分就越多。 原题 题解 记得去年参加 APIO 的时候根本不会这道题 这次 wxjor 神仙重提了一下这道题,然后我也做了一下。 发现转圈想好像不是很管用...

weixin_30606669的博客 208

创建 Fiori Space 时看不到传输请求的根因与排查路径

摘要: 在创建Fiori Space时,若Transport字段下拉列表为空,通常是因为系统未找到符合要求的传输请求。主要原因是: 请求类型不匹配:需使用Customizing request而非Workbench request。 用户权限问题:当前用户需在请求下有可用的task。 客户端或系统不一致:请求需在当前客户端和正确系统(如后端)中创建。 解决方法: 在当前客户端和系统中新建Customizing request,确保包含用户task。 检查是否为前后端分离架构,确保请求创建在正确的系统。 验证

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 107

【CTSC 2015】&【APIO 2015】酱油记

  蒟蒻有幸参加了神犇云集的CTSC &amp; APIO 2015,感觉真是被虐成傻逼了……这几天一直没更新博客,今天就来补一下吧~~(不过不是题解……) Day 0   从太原到北京现在坐高铁只需3小时= =然而高铁一路上多次停靠,时速长时间保持在200Km/h以下,超差评!!   然后坐地铁来到燕山大酒店,传说中的四星级酒店啊0.0看大厅就觉得很高档的样子,然而我们住的是旁边的 燕山大...

weixin_30484247的博客 241

第3版•系统集成项目管理工程师(中级) │ 告别迷茫!案例分析高分攻略

🥏第3版•系统集成项目管理工程师(中级) │ 告别迷茫!案例分析高分攻略

✨ 欢迎来到【Seal ^_^ 的优快云博客】!✨ 3867

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

【题解】LuoGu3648:[APIO2014]序列分割

原题传送门 斜率优化 可以证明得分与分割顺序无关(然而我不会) 令si=∑j=1iajs_i=\sum_{j=1}^{i}a_jsi​=∑j=1i​aj​ 得到一个很显然的暴力dp dpi,j表示到第i个数,分割了j次dp_{i,j}表示到第i个数,分割了j次dpi,j​表示到第i个数,分割了j次 dpi,j=max(dpk,j−1+sk(si−sk))dp_{i,j}=max(dp_{k,j-1...

ModestCoder_的博客 380

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

LibreOJ 题解汇总

目录 #1. A + B Problem #2. Hello, World! #3. Copycat #4. Quine #7. Input Test #100. 矩阵乘法 #101. 最大流 #102. 最小费用流 ...

weixin_30810239的博客 844

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

bzoj3676: [Apio2014]回文串

Description 考虑一个只包含小写拉丁字母的字符串s。我们定义s的一个子串t的“出 现值”为t在s中的出现次数乘以t的长度。请你求出s的所有回文子串中的最 大出现值。 Input 输入只有一行,为一个只包含小写字母(a -z)的非空字符串s。 Output 输出一个整数,为逝查回文子串的最大出现值。 Sample Inpu

Ra1nBow_Chan 505

Team Task:DP

我分到的任务是看ppt……so这篇blog大概就是我的任务进度了?好像还混杂了一些奇怪的求助…… 提纲篇 又名如何高效看PPT? 动态规划优化.pdf By ExfJoe 2018/4/1114:09 第一部分,讲了讲DP的定义……道理我都懂…… 第二部分讲模型,还是没有题计数类DP 矩阵、斯特林数,用恰好为k、大于等于k等限制来描述期望类DP...

weixin_33763244的博客 283

UOJ 111 & BZOJ 4070 [Apio2015]雅加达的摩天楼

分块+最短路我们把一个(有doge的)点连向所有它能到达的所有点,这样就是一个最短路问题。考虑优化建图,用分块。如果pp大于n‾√\sqrt n就直接连。小于n‾√\sqrt n的情况?其实有一个性质,对于一系列有相同pp的点i<j<ki<j<k,如果ii能到达kk,jj能到达kk,那只要连上(i,j)(i,j)和(j,k)(j,k) 而不连(i,k)(i,k)即可。也就是说在pp相同的情况下,一个

无尽 602
上一篇: bzoj1975: [Sdoi2010]魔法猪学院
下一篇: bzoj2653: middle
thy_asdf
博客等级 码龄12年 16粉丝 186原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值