Arthur and Table CodeForces - 557C

首先,按长度排序。

长度为p的桌腿有a[p]个。

要使得长度为p的桌腿为最长,那么要按照代价从小到大砍掉sum{长度不到p的腿的数量}-a[p]+1条腿。还需要将所有长于p的桌腿砍光。枚举p即可。

要点(看了题解才明白):可以通过精力最高只有200的条件,大大缩小时间/空间复杂度。

恩,所以...这是贪心吧?

 #include<cstdio>
#include<algorithm>
using namespace std;
struct Leg
{
int len,cost,len2;
bool operator<(const Leg& b) const
{
return len<b.len||(len==b.len&&cost<b.cost);
}
}l[];
int l2[];
int sum1,n,ans=0x3f3f3f3f,now,now2,now3,sum2;
int main()
{
int i,j;
scanf("%d",&n);
for(i=;i<=n;i++)
scanf("%d",&l[i].len);
for(i=;i<=n;i++)
scanf("%d",&l[i].cost);
sort(l+,l+n+);
for(i=;i<=n;i++)
if(l[i].len!=l[i-].len)
l[i].len2=l[i-].len2+;
else
l[i].len2=l[i-].len2;
for(i=;i<=n;i++)
sum2+=l[i].cost;
for(i=;i<=n;i++)
{
sum2-=l[i].cost;
now++;
if(l[i].len2==l[i+].len2) continue;
now2=sum1-now+;
if(now2<=)
{
ans=min(sum2,ans);
}
else
{
now3=;
for(j=;j<=;j++)
{
if(l2[j]>=now2)
{
now3+=j*now2;
break;
}
now2-=l2[j];
now3+=j*l2[j];
}
ans=min(now3+sum2,ans);
}
for(j=i;l[j].len2==l[j-].len2;j--)
l2[l[j].cost]++;
l2[l[j].cost]++;
sum1+=now;
now=;
}
printf("%d",ans);
return ;
}

最新文章

  1. VS-项目发布失败的解决方案1
  2. 将ASP.NET Core应用程序部署至生产环境中(CentOS7)
  3. [Django] Setting up Django Development Environment in Ubuntu 14.04
  4. 每天一命令 git stash
  5. Class和ClassLoader的getResourceAsStream区别
  6. Delphi中uses在interfeace和implementation中的区别
  7. 八款你不得不知的开源前端JS框架
  8. hadoop集群默认配置和常用配置【转】
  9. 正则表达式 之 C#后台应用
  10. 类型&lt;T&gt; where T:class的用法
  11. 节点的创建--对比jQuery与JavaScript 方法
  12. js window.open 参数设置
  13. 周赛D题
  14. ui主线程控件的更新就让这个activity的异步任务做完整
  15. JDBC中rs.beforeFirst()
  16. SpringMVC框架学习笔记(3)——controller配置汇总
  17. HTML5的优点与缺点?
  18. idea Invalid bound statement (not found):
  19. Linux mail 邮件发送
  20. GNum试用体验

热门文章

  1. Python开发【深浅拷贝】
  2. 文件读写&amp;&amp;内容替换
  3. vue开发购物车,解决全选单选问题
  4. 非常精彩的Silverlight 2控件样式
  5. Lucene 的四大索引查询 ——bool 域搜索 通配符 范围搜索
  6. js获取form的方法
  7. sublime text 3 安装vue 语法插件
  8. iOS沙盒(sandbox)机制及获取沙盒路径
  9. struct 结构体解析(原)
  10. bzoj1017 [JSOI2008]魔兽地图DotR——DP