【集训Day1 测试】选择课题
选择课题(bestproject)
【问题描述】
Robin 要在下个月交给老师 n 篇论文,论文的内容可以从 m 个课题中选择。由于课题数有限,Robin 不得不重复选择一些课题。完成不同课题的论文所花的时间不同。具体地说,对于某个课题 i,若 Robin 计划一共写 x 篇论文,则完成该课题的论文总共需要花费 Ai*x^Bi 个单位时间(系数 Ai 和指数 Bi 均为正整数)。给定与每一个课题相对应的 Ai 和 Bi 的值,请帮助 Robin 计算出如何选择论文的课题使得他可以花费最少的时间完成这 n 篇论文。
【输入格式】
第一行有两个用空格隔开的正整数 n 和 m,分别代表需要完成的论文数和可供选择的课题数。
以下 m 行每行有两个用空格隔开的正整数。其中,第 i 行的两个数分别代表与第 i 个课题相对应的时间系数 Ai 和指数 Bi。
【输出格式】
输出完成 n 篇论文所需要耗费的最少时间。
【输入样例】
10 3
2 1
1 2
2 1
【输出样例】
19
【样例说明】
4 篇论文选择课题一,5 篇论文选择课题三,剩下一篇论文选择课题二,总耗时为 2*4^1+1*1^2+2*5^1=8+1+10=19。可以证明,不存在更优的方案使耗时小于 19。
【数据规模】
对于 40%的数据,n<=10,m<=5;
对于 100%的数据,n<=200,m<=20,Ai<=100,Bi<=5。
【解题思路】
本题属于动态规划中的完全背包问题。·根据动态规划的思想推导状态转移方程,令dp[m][n]表示前m个课题写n篇论文的最优解,以课题为阶段,即为完全背包中以物品为阶段。
然后进行推导,在dp[m][n]之前做了什么,无非就是选择第m个课题写k(0<=k<=n)篇论文。
那么根据这样的推导,状态转移方程就是:dp[m][n]=min(dp[m][n],dp[m-1][n-k]+a[m]*k^b[m]。
数据量不大,完全可以直接dp,无须优化。
【解题反思】
- 对于经典的模板题应该要十分熟悉
- 由于结果可能很大,建议使用long long
- 注意数组的范围
【参考程序】
#include<iostream>
#include<cstdio>
using namespace std;
const long long maxint=1000000000000000;
int n,m,a[21],b[21];
long long f[21][201],ans;
long long power(int x,int y)//求x的y次幂
{
long long sum=1;
for (int i=1;i<=y;i++) sum*=x;
return sum;
}
int main()
{
freopen("bestproject.in","r",stdin);
freopen("bestproject.out","w",stdout);
cin>>n>>m;
for (int i=1;i<=m;i++) cin>>a[i]>>b[i];
for (int i=0;i<=m;i++)
for (int j=1;j<=n;j++) f[i][j]=maxint;
//初始化为无穷大
for (int i=1;i<=m;i++)
for (int j=1;j<=n;j++)
for (int k=0;k<=j;k++)
f[i][j]=min(f[i][j],f[i-1][j-k]+a[i]*power(k,b[i]));//状态转移方程
cout<<f[m][n];
return 0;
}
【集训Day1 测试】选择课题的更多相关文章
- 中山纪中集训Day1测试(摸鱼)
AT3 粉刷匠 Description 赫克托是一个魁梧的粉刷匠,而且非常喜欢思考= = 现在,神庙里有N根排列成一直线的石柱,从1到N标号,长老要求用油漆将这些石柱重新粉刷一遍.赫克托有K桶颜色各不 ...
- 【集训Day1 测试】装饰
装饰(decorate) [题目描述] 一个图有 N 个结点,编号 1 至 N,有 M 条无向边,第 i 条边连接的两个结点是 Ai 和Bi,其中 Ai 和 Bi 是不同的结点.可能有多条边连接的是同 ...
- 【集训Day1 测试】【USACO】照相
照相(fairphoto) [题目描述] 有N 头奶牛站在一条数轴上,第 i 头奶牛的位置是 Pi,奶牛不会重叠站在同一个位置, 第i 头奶牛的颜色是 Ci,其中 Ci 要么是字符'G'要么是字符'H ...
- 【集训Day1 测试】奇怪数
奇怪数(odometer) [题目描述] 一个正整数Z是奇怪数,当且仅当满足的条件是:Z的所有数字中,只有一个数字不同于其他数字.例如:33323.110 都是奇怪数,而 9779.5555 都不是奇 ...
- 【欧拉回路+最小生成树】SD开车@山东2018省队一轮集训day1
目录 [欧拉回路+最小生成树]SD开车@山东2018省队一轮集训day1 PROBLEM 题目描述 输入 输出 样例输入 样例输出 提示 SOLUTION CODE [欧拉回路+最小生成树]SD开车@ ...
- 国庆集训 Day1 T2 生成图 DP
国庆集训 Day1 T2 生成图 现在要生成一张\(n\)个点的有向图.要求满足: 1.若有 a->b的边,则有 b->a 的边 2.若有 a->b 的边和 b->c 的边,则 ...
- 2019暑期金华集训 Day1 组合计数
自闭集训 Day1 组合计数 T1 \(n\le 10\):直接暴力枚举. \(n\le 32\):meet in the middle,如果左边选了\(x\),右边选了\(y\)(且\(x+y\le ...
- 2019暑期金华集训 Day1 数据结构
自闭集训 Day1 数据结构 CF643G 用类似于下面的方法,搬到线段树上. 如何合并两个集合?先全部放在一起,每次删掉最小的\(cnt_i\),然后把其他所有的\(cnt\)都减去\(cnt_i\ ...
- LOJ 6060「2017 山东一轮集训 Day1 / SDWC2018 Day1」Set(线性基,贪心)
LOJ 6060「2017 山东一轮集训 Day1 / SDWC2018 Day1」Set $ solution: $ 这一题的重点在于优先级问题,我们应该先保证总和最大,然后再保证某一个最小.于是我 ...
随机推荐
- 三、进程和线程、协程在python中的使用
三.进程和线程.协程在python中的使用 1.多进程一般使用multiprocessing库,来利用多核CPU,主要是用在CPU密集型的程序上,当然生产者消费者这种也可以使用.多进程的优势就是一个子 ...
- FRP代理及其在数据库安全上的实践
1 代理 现如今的互联网世界里,代理服务已经十分常见,它通常作为一个第三方或者说中转站角色替代用户取得信息或者服务. 根据代理对象的不同,代理服务可以分为正向代理和反向代理. 1.1 正向代理 我们通 ...
- text文本样式二
text-transform样式用于将元素的字母全都变成大小 letter-spacing设置字符之间的间距 <html> <head> <style type=&quo ...
- redis入门(三)
目录 redis入门(三) 目录 前言 事务 原理 Lua脚本 安装 脚本命令 集群搭建工具 redis-trib.rb redis官方集群搭建 集群横向扩展 故障转移 redis管理 参考文档 re ...
- pyEcharts安装及使用指南
pyEcharts安装及使用指南 ECharts是一个纯Javascript的图表库,可以流畅的运行在PC和移动设备上,兼容当前绝大部分浏览器,底层依赖轻量级的Canvas类库ZRender,提供直观 ...
- [翻译]Jupyter notebook .NET Core 内核预览1
当您想到Jupyter Notebooks时,您可能会考虑使用Python,R,Julia或Scala而不是.NET编写代码. 今天,我们很高兴宣布您可以在Jupyter Notebooks中编写.N ...
- [Python]python面向对象 __new__方法及单例设计
__new__ 方法 使用 类名() 创建对象时,Python 的解释器 首先 会 调用 __new__ 方法为对象 分配空间 __new__ 是一个 由 object 基类提供的 内置的静态方法,主 ...
- csp-s模拟测试101的T3代码+注释
因为题目过于大神所以单独拿出来说.而且既然下发std了颓代码貌似也不算可耻233 很难讲啊,所以还是写在代码注释里面吧 因为比较认真的写了不少注释,所以建议缩放到80%观看,或者拿到gedit上 1 ...
- [考试反思]1010csp-s模拟测试67:摸索
嗯...所谓RP守恒? 仍然延续着好一场烂一场的规律. 虽说我也想打破这个规律,但是并不想在考烂之后打破这个规律.(因为下一场要考好???) 我也不知道我现在是什么状态,相较于前一阶段有所提升(第一鸡 ...
- [考试反思]0803NOIP模拟测试12:偿还
嗯,rank5.没什么可评价的,高不算高低不算低. 一套好题,被我浪费了. 离上面280的大神差的有点远. 分机房的绝响就要来临. 越来越感觉自己变菜了,整体的能力水平在下滑. 说的不只是考试,包括平 ...