17967 大师姐唱K的固有结界

该题有题解

时间限制:1000MS  内存限制:65535K
提交次数:41 通过次数:8 收入:107

题型: 编程题   语言: G++;GCC;VC

Description

大家总所周知,我校ACM校队中有个13级的师姐,人称大师姐!
她的代码能力可谓是女中豪杰,但是,大师姐除了敲代码很牛逼以外,还是个麦霸。
在某次聚会中,大师姐从头到尾一口气战了6个小时,而且还唱了《青藏高原》、《天路》等逆天般高音的歌曲。 为什么大师姐唱歌这么厉害!?秘密就在于大师姐唱歌的时候会施放固有结界,在这个结界的有效时间内,大师姐可以不对喉咙造成任何负担地唱任意
歌曲。大师姐在一次唱K中可以施放两次固有结界,每次结界的最长持续时间为T分钟。
对于大师姐来说,她在施放结界的情况下从头到尾唱完一首歌则不会对喉咙造成任何影响,否则将按这首歌原来的损伤值计算。
当然,大师姐可以在施放第一次结界结束时立刻施放第二次,此时不视为结界中断。
大师姐是个聪明的女生,所以为了让喉咙负担最低,她会选择两个最佳的时刻施放结界。
假设大师姐现在的喉咙的舒适度是H,我们已经为师姐点了n首歌,师姐必须按照这个顺序演唱,每首歌都有长度t(分钟),以及在不施放结界时唱这首
歌会减低喉咙舒适度d。

请求出唱完这n首歌之后,师姐喉咙的舒适度的最大值。出题人:Lrc

输入格式

输入的第一行是三个正整数,结界的持续时间T(T <= 10000)、喉咙最初的舒适度H(H <= 100000)和歌曲的数量n(n <= 1000)。
下面n行每一行分别对应一首歌,每一行有两个正整数,分别为这首歌的时间t(t <= 100)以及这首歌对喉咙的损伤d(d <= 10000)。

输出格式

唱完这n首歌之后,师姐喉咙的舒适度的最大值,如果结果小于0,则输出0。

输入样例

5 100 4
6 10
5 9
4 8
2 1

输出样例

89

提示

够了这题的,建议把自己的提交代码拿出来试试以下这组数据能不能通过:
5 100 6
2 4
3 5
1 2
1 3
4 5
5 6
答案为92,若您的程序输出答案不对,建议自行找出原因并修改代码。

此数据不作评测数据,但会在比赛后增加相应测试数据,已经通过的代码不作重新评判。

************************************************************************************************************************************

解题思路:

1.有2次释放结界的机会,所以就可以2次连在一起放结界,两次分开放结界。

2.当一首歌的时间少于结界的时间时,将会有剩下的时间。那么如果下一首歌的时间又小于剩下的时间,那么开一次结界就可以唱n首歌。

************************************************************************************************************************************

#include <stdio.h>
int T, H, n, tail;
struct song
{
int t;
int d;
};
struct song a[1000]={0};
int take(int j, int time)
{
int add=0;
while(a[j].t<=time&&time&&j<n){
add+=a[j].d;
time-=a[j].t;
j++;
}
tail=j;
return add;
}
int main()
{
int i, m, max=0;
scanf("%d%d%d", &T, &H, &n);
for(i=0;i<n;i++){
scanf("%d%d", &a[i].t, &a[i].d);
H-=a[i].d;
}
m=H; for(i=0;i<n;i++)//两个结界在一起
{
int lt=2*T;//两结界的时间
int temp;
temp=m+take(i, lt);
if(temp>max) max=temp;
} for(i=0;i<n;i++)//两个结界分开
{
int lt=T, j;
int temp;
int t2;
t2=take(i, lt);
for(j=tail;j<n;j++)
{
temp=m+take(j, lt)+t2;
if(temp>max) max=temp;
}
}
if(max>=0)
printf("%d\n", max);
else
printf("0\n");
return 0;
}

************************************************************************************************************************************

附上几组数据:

/////////////////////

输入数据:
1 100 10
1 10
1 20
1 2
1 35
1 21
1 5
1 43
1 12
1 5
1 3 输出答案:
22
/////////////////////
输入数据:
4 100 1
10 110 输出答案:
1|0

/////////////////////

最新文章

  1. 数据备份的OSS接口
  2. length属性,length()方法和size()的方法的区别
  3. 关于用Max导出Unity3D使用的FBX文件流程注解
  4. iOS-添加测试设备Identifier
  5. Javascript基础学习(3)_对象和数组
  6. Magician - hdu 5316 (区间查询合并)
  7. java中的302和sendRedirect的区别
  8. mov sreg, r/m16 在16位和32位编程中的区别
  9. postgres 错误duplicate key value violates unique constraint 解决方案
  10. 【USB-HID在STM32上的实现】-00-开始
  11. python--批量下载豆瓣图片之升级版本
  12. Centos7.4 防火墙配置
  13. 黄聪:微信h5支付demo微信H5支付demo非微信浏览器支付demo微信wap支付
  14. 【每日dp】 Gym - 101889E Enigma 数位dp 记忆化搜索
  15. 公式for TinyMCE 编辑器@ cnblogs.com
  16. js 回调函数理解与应用
  17. Delphi 10 Seattle 小票打印控件TQ_Printer
  18. mybatis对mysql进行分页
  19. 三种简单的html网页自动跳转方法
  20. MASQL语法大全

热门文章

  1. JAVA AOP面向切面编程与动态代理
  2. vue 组件传参
  3. SQL server 2008r2 file is corrupt
  4. HDU 6468 /// DFS
  5. JavaScript基础4——省市联动
  6. eclipse hibernate配置文件(*.hbm.xml)加上自动提示功能
  7. CIFAR-10 dataset 的下载与使用、转图片
  8. iOS 证书(.p12)和描述文件(.mobileprovision)的导出和使用方法
  9. iis8.5部署net项目
  10. [NOI2004]郁闷的出纳员(平衡树)