帖子帖子!!

emailed 2008-05-10 04:50:36
http://acm.tju.edu.cn/toj/showp2992.html
...全文
56 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
tailzhou 2008-05-10
  • 打赏
  • 举报
回复
没看明白brucesea 的 G(k+1)的用途;

由E(k) = Dis(k)-Dis(k-1)=C1*U1+C2*U2+...+Ck-1*Uk-1-(Ck*Dk + ... + Cn*Dn)
就可以得到比较好的解决方法了;


up_diff[i]==c1*u1+c2*u2+....+ci*ui==up_diff[i-1]+ci*ui
down_diff[i]==ci*di+c(i+1)*d(i+1)+....cn*dn==down_diff[i+1]+ci*di;

那么 E[k]=up_diff[k-1]-down_diff[k];


以1楼为基准,计算当在i楼时,总的discontent与在1楼的差值diff[i];
diff[i]=diff[i-1]+E[i],差值最小的即为解;

实际编码的时候,up_diff,down_diff,E,diff都可以递推计算,不需要保存;

如:
long long down_diff=c1*d1+c2*d2+....cn*dn;
long long up_diff=0;
diff=0;
min_index=1;
min_diff=0;
int i;
for (i=2;i<=n;i++)
{
up_diff+=c(i-1)*u(i-1);
down_diff-=c(i-1)*d(i-1);
diff+=up_diff-down_diff;
if(diff<min_diff)
{
min_diff=diff;
min_index=i;
}
}
printf("%d\n",min_index);




可口可乐 2008-05-10
  • 打赏
  • 举报
回复
程序的工作就是根据E(k)算E(k+1),再由E(k+1)算Dis(k+1)
E(k+1)=E(k)+G(k+1)
Dis(k+1)=Dis(k)+E(k+1)

不知道上面的推导会不会有地方搞错,不过主要思想就是这样了
可口可乐 2008-05-10
  • 打赏
  • 举报
回复
这题主要就是一点数学计算
假设meeting在第k层,discontent为
Dis(k)=C1*(k-1)*U1 + C2*(k-2)*U2 + ... + Ck*(k-k)*Uk + Ck+1*1*Dk+1 + ...+ Cn*(n-k)*Dn
假设meeting在第k+1层,discontent为
Dis(k+1)=C1*(k)*U1 + C2*(k-1)*U2 + ... + Ck*1*Uk + Ck+1*0*Dk+1 + Ck+2*1*Dk+2 ...+ Cn*(n-k-1)*Dn

有k=>k+1
E(k+1)=Dis(k+1)-Dis(k)=C1*U1+C2*U2+...+Ck*Uk-(Ck+1*Dk+1 + ... + Cn*Dn)
也就是说k-1=>k有
E(k) = Dis(k)-Dis(k-1)=C1*U1+C2*U2+...+Ck-1*Uk-1-(Ck*Dk + ... + Cn*Dn)

故有
G(k+1)=E(k+1)-E(k)=Ck*Uk+Ck*Dk

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧