[编程题]奖学金
2016-04-18 17:10
183 查看
小v今年有n门课,每门都有考试,为了拿到奖学金,小v必须让自己的平均成绩至少为avg。每门课由平时成绩和考试成绩组成,满分为r。现在他知道每门课的平时成绩为ai ,若想让这门课的考试成绩多拿一分的话,小v要花bi 的时间复习,不复习的话当然就是0分。同时我们显然可以发现复习得再多也不会拿到超过满分的分数。为了拿到奖学金,小v至少要花多少时间复习。
输入描述:
输出描述:
输入例子:
输出例子:
分析:这道题给的标签是动态规划,其实我觉得没有用到动态规划的思想,勉强算是贪心吧,其实就是照着手工计算的思路写下来就可以了,然而我还是瞎鼓捣了很久。。
拿到这道题我们首先会怎么计算呢,反正都是加一分,当然从需要的时间短的开始加,比如例子中当然从只需要1个小时的开始算,只需要1个小时的课程全部拿到满分了,再算需要5个小时的。代码也是照着这个思路写,也就是先把需要的时长排序,从最小的开始累加,直到现在的总分大于avg*n为止。
中间遇到了几个问题:
1.一开始我是用一个vector保存需要的时间b,排序之后a也得跟着动,这就有点麻烦,想要不用个map。。?其实自己手写一个struct,对结构体内的一个元素进行排序,就解决这个问题了
2.其中几个变量需要用long保存,不然会溢出
代码如下:
输入描述:
第一行三个整数n,r,avg(n大于等于1小于等于1e5,r大于等于1小于等于1e9,avg大于等于1小于等于1e6),接下来n行,每行两个整数ai和bi,均小于等于1e6大于等于1
输出描述:
一行输出答案。
输入例子:
5 10 9 0 5 9 1 8 1 0 1 9 100
输出例子:
43
分析:这道题给的标签是动态规划,其实我觉得没有用到动态规划的思想,勉强算是贪心吧,其实就是照着手工计算的思路写下来就可以了,然而我还是瞎鼓捣了很久。。
拿到这道题我们首先会怎么计算呢,反正都是加一分,当然从需要的时间短的开始加,比如例子中当然从只需要1个小时的开始算,只需要1个小时的课程全部拿到满分了,再算需要5个小时的。代码也是照着这个思路写,也就是先把需要的时长排序,从最小的开始累加,直到现在的总分大于avg*n为止。
中间遇到了几个问题:
1.一开始我是用一个vector保存需要的时间b,排序之后a也得跟着动,这就有点麻烦,想要不用个map。。?其实自己手写一个struct,对结构体内的一个元素进行排序,就解决这个问题了
2.其中几个变量需要用long保存,不然会溢出
代码如下:
#include <iostream> #include <vector> #include <algorithm> using namespace std; struct les{ int ori; int time; }; bool cmp(les a,les b){ return a.time<b.time; } int main(){ int n,r,avg; while(cin>>n>>r>>avg){ long cur=0; int a,b; vector<les> t; for(int i=0;i<n;i++){ les temp; cin>>temp.ori>>temp.time; t.push_back(temp); cur+=temp.ori; } long ret=0; long total=avg*n; if(cur>=total){ cout<<ret<<endl; continue; } sort(t.begin(),t.end(),cmp); //最后传入的是方法,按结构体中一个元素的升序排列 for(int i=0;i<n;i++){ cur+=(r-t[i].ori); if(cur>=total){ cur-=(r-t[i].ori); //这里要把一开始加上去的减掉,一开始没有减回去,答案就总是不对 ret+=(total-cur)*t[i].time; cout<<ret<<endl; break; } else{ ret+=(r-t[i].ori)*t[i].time; } } } return 0; }
相关文章推荐
- Reflect Java反射机制
- VisualVM连接远程Java进程
- java学习笔记(一)
- C#学习笔记二 引用参数和值参数
- 对DllRegisterServer的调用失败,错误代码为0x8007005的解决办法,注册控件
- java学习 集合之LinkedList
- asp.net Repeater如何按照特定字段绑定特定的内容
- Java内部类
- ASP.Net MVC开发基础学习笔记(10):分部视图PartialView
- php 长整形转字符串
- About QT
- java线程池学习
- c# class struct区别
- Spring基于 Annotation 的简单介绍
- ASP.Net MVC开发基础学习笔记(9):查看详情、编辑数据、删除数据
- 利用ASP.NET加密和解密Web.config中连接字符串
- array_1.php
- PB在代码中更改数据源
- ASP.Net MVC开发基础学习笔记(8):新建数据页面
- JAVA知识汇总链接