博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
武大网络预赛 Problem 1537 - A - Stones I
阅读量:2497 次
发布时间:2019-05-11

本文共 1083 字,大约阅读时间需要 3 分钟。

http://acm.whu.edu.cn/land/problem/detail?problem_id=1537

告诉你n个物品, n<=1000, 每个物品有两个值a和b, 每选择一个物品, 所有物品包括这件选中的物品的a 就要减去这件选中物品的 b值,问你选中物品的a的总和Max最大为是多少。

主要是看题面的条件,  既然n<=1000就可能存在O(n^2)复杂度的解。

由于物品数不会超过1000, 就可以枚举放入的物品总数x, 用n^2的复杂度解决问题。

首先从1到n枚举放入的物品总数为x,那么假如放了第k件物品,就可以使得总收益增加a[k]-b[k]*x,所以就对所有n件物品按a[k]-b[k]*x从大到小排一个序,再将前x件物品计算好,更新一下Max。最后把Max输出来。

#include 
#include
#include
using namespace std;const int maxn = 1100;struct node{ int a, b;}no[maxn];int num;bool cmp(const node &x, const node &y){ return x.a - x.b * num > y.a - y.b * num;}int main(){// freopen("data.in", "r", stdin); int ans, n, sum; while(scanf("%d", &n) != EOF && n != 0) { for(int i = 0; i < n; i++) scanf("%d%d", &no[i].a, &no[i].b); ans = 0; for(num = 1; num <= n; num++) { sort(no, no+n, cmp); sum = 0; for(int i = 0; i < num; i++) { sum += (no[i].a - no[i].b * num); } ans = max(ans, sum); } printf("%d\n", ans); } return 0;}

转载地址:http://xbhrb.baihongyu.com/

你可能感兴趣的文章
iOS开发中遇到的问题整理 (一)
查看>>
Swift code into Object-C 出现 ***-swift have not found this file 的问题
查看>>
为什么你的App介绍写得像一坨翔?
查看>>
RTImageAssets插件--@3x可自动生成@2x图片
查看>>
iOS开发的一些奇巧淫技
查看>>
常浏览的博客和网站
查看>>
Xcode 工程文件打开不出来, cannot be opened because the project file cannot be parsed.
查看>>
iOS在Xcode6中怎么创建OC category文件
查看>>
5、JavaWeb学习之基础篇—标签(自定义&JSTL)
查看>>
8、JavaWEB学习之基础篇—文件上传&下载
查看>>
reRender属性的使用
查看>>
href="javascript:void(0)"
查看>>
h:panelGrid、h:panelGroup标签学习
查看>>
f:facet标签 的用法
查看>>
<h:panelgroup>相当于span元素
查看>>
java中append()的方法
查看>>
必学高级SQL语句
查看>>
经典SQL语句大全
查看>>
log日志记录是什么
查看>>
<rich:modelPanel>标签的使用
查看>>