uestc信息门户,uestc是什么意思
【题目链接】 点击打开链接
【题意】中文题目。
【解题方法】 容易想到一个非常朴素的DP。dp[i][j]代表第我个儿子,身高为j的最低花费DP[I][j]=min(DP[I-1][k]ABS(j-k)* C(x[I]-j)*(x[I]-j));
然后分为两种情况:
1:第我个儿子的身高,比i-1高时DP[I][j]=min(DP[I-1][k]j * c-k * c X),(k=j) X等于(x[I]-j)*(x[I]-j);
2:第我个儿子的身高,比i-1矮时,DP[I][j]=min(DP[I-1][k]-j * c k * c X),(k=j) X等于(x[I]-j)*(x[I]-j);
对于第一种情况,我们让f[I-1][k]=DP[I-1][k]-k * c;g[I][j]=j * c x;
【交流代码】
//
//由BLUEBUFF 2016年1月8日创建
//版权所有(c) 2016年BLUEBUFF .版权所有
//
#杂注注释(链接器,/STACK:102400000,102400000 )
#包含ext/Pb _ ds/assoc _容器. hpp
#包含ext/pb_ds/tree_policy.hpp
#包含ext/pb_ds/hash_policy.hpp
#包含集
#包含地图
#包括队列
#包括堆栈
#包含数学函数
#包括cstdio
#包含时间。h
#包含标准库函数
#包括字符串
# include sstream//是字符串流
#包括输入输出流
#包含算法
使用命名空间标准
//使用命名空间_ _ gnu _ pbds
typedef long long LL
数据类型说明对int,LL pp
#定义REP1(i,a,b)for(int I=a;我我)
#定义REP2(i,a,b)for(int I=a;我我)
#定义REP3(i,a,b)for(int I=a;我我-)
#定义CLR(a,b) memset(a,b,sizeof(a))
#定义MP(x,y) make_pair(x,y)
const int maxn=220
const int maxm=2e5
const int maxs=10
const int maxp=1e3 10
const int INF=1e9
const int UNF=-1e 9;
const int mod=1e 9 7;
int gcd(int x,int y) {return y==0?x : gcd(y,x % y);}
//typedef tree int,null_type,less int,rb_tree_tag,tree _ order _ statistics _ node _ update order _ set;
//头
int dp[2][110],n,x,c,q[110],head,tail,cur
int main()
{
while(scanf(%d%d ,n,c)!=EOF)
{
head=tail=cur=0;
CLR(q,0);
scanf(%d ,x);
REP2(i,0,100){
if(I x)DP[cur][I]=INF;
else DP[cur][I]=(x-I)*(x-I);
}
REP1(i,1,n){
scanf(%d ,x);
cur ^=1;
头=尾=0;
REP2(j,0,100){
int nowf=DP[cur ^ 1][j]-j * c;
while(head tail q[tail-1]nowf)tail-;
q[tail]=nowf;
if(j x)DP[cur][j]=INF;
else DP[cur][j]=q[head]j * c(j-x)*(j-x);
}
头=尾=0;
REP3(j,100,0){
int nowf=dp[cur^1][j]j * c;
while(head tail q[tail-1]nowf)tail-;
q[tail]=nowf;
if(j=x)DP[cur][j]=min(DP[cur][j],q[head]-j * c(j-x)*(j-x));
else DP[cur][j]=INF;
}
}
int ans=INF
REP2(i,0,100){
ans=min(ans,DP[cur][I]);
}
法院和法院
}
返回0;
}
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。