选择课题(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 测试】选择课题的更多相关文章

  1. 中山纪中集训Day1测试(摸鱼)

    AT3 粉刷匠 Description 赫克托是一个魁梧的粉刷匠,而且非常喜欢思考= = 现在,神庙里有N根排列成一直线的石柱,从1到N标号,长老要求用油漆将这些石柱重新粉刷一遍.赫克托有K桶颜色各不 ...

  2. 【集训Day1 测试】装饰

    装饰(decorate) [题目描述] 一个图有 N 个结点,编号 1 至 N,有 M 条无向边,第 i 条边连接的两个结点是 Ai 和Bi,其中 Ai 和 Bi 是不同的结点.可能有多条边连接的是同 ...

  3. 【集训Day1 测试】【USACO】照相

    照相(fairphoto) [题目描述] 有N 头奶牛站在一条数轴上,第 i 头奶牛的位置是 Pi,奶牛不会重叠站在同一个位置, 第i 头奶牛的颜色是 Ci,其中 Ci 要么是字符'G'要么是字符'H ...

  4. 【集训Day1 测试】奇怪数

    奇怪数(odometer) [题目描述] 一个正整数Z是奇怪数,当且仅当满足的条件是:Z的所有数字中,只有一个数字不同于其他数字.例如:33323.110 都是奇怪数,而 9779.5555 都不是奇 ...

  5. 【欧拉回路+最小生成树】SD开车@山东2018省队一轮集训day1

    目录 [欧拉回路+最小生成树]SD开车@山东2018省队一轮集训day1 PROBLEM 题目描述 输入 输出 样例输入 样例输出 提示 SOLUTION CODE [欧拉回路+最小生成树]SD开车@ ...

  6. 国庆集训 Day1 T2 生成图 DP

    国庆集训 Day1 T2 生成图 现在要生成一张\(n\)个点的有向图.要求满足: 1.若有 a->b的边,则有 b->a 的边 2.若有 a->b 的边和 b->c 的边,则 ...

  7. 2019暑期金华集训 Day1 组合计数

    自闭集训 Day1 组合计数 T1 \(n\le 10\):直接暴力枚举. \(n\le 32\):meet in the middle,如果左边选了\(x\),右边选了\(y\)(且\(x+y\le ...

  8. 2019暑期金华集训 Day1 数据结构

    自闭集训 Day1 数据结构 CF643G 用类似于下面的方法,搬到线段树上. 如何合并两个集合?先全部放在一起,每次删掉最小的\(cnt_i\),然后把其他所有的\(cnt\)都减去\(cnt_i\ ...

  9. LOJ 6060「2017 山东一轮集训 Day1 / SDWC2018 Day1」Set(线性基,贪心)

    LOJ 6060「2017 山东一轮集训 Day1 / SDWC2018 Day1」Set $ solution: $ 这一题的重点在于优先级问题,我们应该先保证总和最大,然后再保证某一个最小.于是我 ...

随机推荐

  1. node项目发布+域名及其二级域名配置+nginx反向代理+pm2

    学习node的时候也写了一些demo.但是只是限于本地测试,从来没有发布.今天尝试发布项目. 需要准备的东西 node 项目:为了突出重点,说明主要问题.我只是拿express 写了很简单的demo. ...

  2. 不想用锐捷怎么办?锐捷出问题|锐捷不能用怎么办?用menohust代替吧

    首先获取 MentoHUST(代替锐捷网络认证客户端) V4.1.0.2001 绿色免费版 解压到任意目录 用管理员身份 启动  安装&卸载 .bat(右键用管理员运行)  这个文件可能乱码了 ...

  3. Airy Memory 内存清理 + 注册码

    链接: https://pan.baidu.com/s/1ZGxDtJBMhrRtBISvL1Lv0w 提取码: ccjs

  4. Linux学习使用Vim

    Vim是从 vi 发展出来的一个文本编辑器.vi编辑器是所有Unix及Linux系统下标准的编辑器,他就相当于windows系统中的记事本一样.代码补完.编译及错误跳转等方便编程的功能特别丰富,在程序 ...

  5. python全局变量及局部变量

    变量作用域 全局变量(global):在函数外部定义,在整个全局范围都有效 局部变量(local) 在函数内部定义,局部变量在局部范围内使用 数字,字符串,元组,修改其变量值时需要加globle,列表 ...

  6. android内嵌H5页(webview)如何定位

    一.切换至webview后再定位元素 (1)获取页面上下文 contexts = driver.contexts (2)切换至webview driver.switch_to.context(cont ...

  7. Maven/Docker快速搭建RocketMQ

    官方文档 [https://rocketmq.apache.org/docs/quick-start/] ①:Bin_二进制安装版 1. 环境准备 系统环境:Centos7 x64 JDK:jdk-8 ...

  8. 2019年10月13日 计算机英语习题 wangqingchao

    Match the explanations in Column B with words and expressions in Columna. (搭配每组中意义相同的词或短语) Types of ...

  9. mysql update获取主键

    mysql update获取主键<pre>SET @update_id := 0;UPDATE mobantestinfo1 SET info2 = 'value', id = (SELE ...

  10. redis 数据库主从不一致问题解决方案

     在聊数据库与缓存一致性问题之前,先聊聊数据库主库与从库的一致性问题. 问:常见的数据库集群架构如何? 答:一主多从,主从同步,读写分离. 如上图: (1)一个主库提供写服务 (2)多个从库提供读服务 ...