博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【SPOJ-GSHOP】Rama and Friends【贪心】【细节】
阅读量:6372 次
发布时间:2019-06-23

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

题意:

给出n个非严格递增的整数(可能有负数),必须操作k次。每次能够把当中一个数变为它的相反数,使得终于的数列和最大。

输出这个最大和。

考验怎样出坑数据卡自己的程序...

#include 
const int maxn = 105;int n, k, num[maxn];inline int iread() { int f = 1, x = 0; char ch = getchar(); for(; ch < '0' || ch > '9'; ch = getchar()) f = ch == '-' ? -1 : 1; for(; ch >= '0' && ch <= '9'; ch = getchar()) x = x * 10 + ch - '0'; return f * x;}int main() { int T = iread(); while(T--) { n = iread(); k = iread(); int cnt = 0, sum = 0; for(int i = 1; i <= n; i++) { num[i] = iread(); cnt += (num[i] < 0); sum += num[i]; } if(k <= cnt) for(int i = 1; i <= k; i++) sum -= 2 * num[i]; else if(k > cnt) { for(int i = 1; i <= cnt; i++) sum -= 2 * num[i]; if(cnt == 0) sum -= ((k - cnt) & 1) * 2 * num[1]; else if(cnt < n) { if(-num[cnt] < num[cnt + 1]) sum += ((k - cnt) & 1) * 2 * num[cnt]; else sum -= ((k - cnt) & 1) * 2 * num[cnt + 1]; } else sum += ((k - cnt) & 1) * 2 * num[cnt]; } printf("%d\n", sum); } return 0;}

提供一些数据:

201 10001 102 1-9 -12 100-9 -12 101-9 -13 1-3 -1 103 2-3 -1 103 3-3 -1 103 100-3 -1 103 101-3 -1 103 200 -3 -2 -1 5 200 -3 -2 -1 0 1 5 200 -3 -2 -1 4 5 5 7 0 1 2 3 4 6 4 -3 -2 -1 1 2 35 3 0 0 0 0 15 4 -2 -1 0 2 56 4-30 -20 -10 100 100 2006 4-30 -20 -10 1 2 36 11 2 3 4 5 6
输出:

0081081214121412471310101104406419

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

你可能感兴趣的文章
工作代码备用
查看>>
spring cloud互联网分布式微服务云平台规划分析--spring cloud定时调度平台
查看>>
说说如何配置 Webpack
查看>>
小程序中使用箭头函数的问题
查看>>
走进 JDK 之 Long
查看>>
Android打地鼠游戏的修改和优化
查看>>
Java异常
查看>>
map、reduce、filter、for...of、for...in等总结
查看>>
html2canvas-实现页面截图
查看>>
入门 | 从文本处理到自动驾驶:机器学习最常用的50大免费数据集
查看>>
笔记-从源码角度分析alloc与init的底层
查看>>
消除GitHub上的历史记录
查看>>
自学 JAVA 的几点建议
查看>>
第十三天-企业应用架构模式-对象-关系元数据映射模式
查看>>
k8s与HPA--通过 Prometheus adaptor 来自定义监控指标
查看>>
虎牙直播在微服务改造方面的实践和总结
查看>>
怎样将优酷网站下载的视频KUX转MP4格式
查看>>
MongoDB 分组统计
查看>>
二进制状态码
查看>>
Vue 中 CSS 动画原理
查看>>