P1336 最佳课题选择

P1336 最佳课题选择

题目描述

Matrix67要在下个月交给老师n篇论文,论文的内容可以从m个课题中选择。由于课题数有限,Matrix67不得不重复选择一些课题。完成不同课题的论文所花的时间不同。具体地说,对于某个课题i,若Matrix67计划一共写x篇论文,则完成该课题的论文总共需要花费Ai*x^Bi个单位时间(系数Ai和指数Bi均为正整数)。给定与每一个课题相对应的Ai和Bi的值,请帮助Matrix67计算出如何选择论文的课题使得他可以花费最少的时间完成这n篇论文。

输入输出格式

输入格式:

第一行有两个用空格隔开的正整数n和m,分别代表需要完成的论文数和可供选择的课题数。

以下m行每行有两个用空格隔开的正整数。其中,第i行的两个数分别代表与第i个课题相对应的时间系数Ai和指数Bi。

输出格式:

输出完成n篇论文所需要耗费的最少时间。

输入输出样例

输入样例#1:

10 3
2 1
1 2
2 1

输出样例#1:

19

说明

【样例说明】

4篇论文选择课题一,5篇论文选择课题三,剩下一篇论文选择课题二,总耗时为2*4^1+1*1^2+2*5^1=8+1+10=19。可以证明,不存在更优的方案使耗时小于19。

【数据规模与约定】

对于30%的数据,n<=10,m<=5;

对于100%的数据,n<=200,m<=20,Ai<=100,Bi<=5。

分析:f[i]到第i个课题时最小价值。状态转移方程:f[j] = min(f[j-k]+a[i]*pow(k,b[i]),f[j]);

注意:1、求最小值,读好题目;2、j需要从大往小枚举,这一点和背包问题一样;3、pow返回double型,double pow(double a, double b);为了避免这个类型的问题,采用了宏定义。

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<cmath>
 4 #define min(a,b) a<=b?a:b
 5
 6 int n,m;
 7 int f[210],a[210],b[210];
 8
 9 int main()
10 {
11     scanf("%d%d",&n,&m);
12     for (int i=1; i<=m; ++i)
13         scanf("%d%d",&a[i],&b[i]);
14     memset(f,0x3f,sizeof(f));
15     f[0] = 0;
16     for (int i=1; i<=m; ++i)
17     {
18         for (int j=n; j>=1; --j)
19         {
20             for (int k=0; k<=j; ++k)
21             {
22                 f[j] = min(f[j-k]+a[i]*pow(k,b[i]),f[j]);
23             }
24         }
25     }
26     printf("%d",f[n]);
27     return 0;
28 }
时间: 2024-10-17 09:02:22

P1336 最佳课题选择的相关文章

luogu P1336 最佳课题选择 |背包dp

题目描述 Matrix67要在下个月交给老师n篇论文,论文的内容可以从m个课题中选择.由于课题数有限,Matrix67不得不重复选择一些课题.完成不同课题的论文所花的时间不同.具体地说,对于某个课题i,若Matrix67计划一共写x篇论文,则完成该课题的论文总共需要花费Ai*x^Bi个单位时间(系数Ai和指数Bi均为正整数).给定与每一个课题相对应的Ai和Bi的值,请帮助Matrix67计算出如何选择论文的课题使得他可以花费最少的时间完成这n篇论文. 输入格式 第一行有两个用空格隔开的正整数n和

最佳课题选择

最佳课题选择 时间限制: 1 Sec  内存限制: 128 MB 题目描述 Matrix67要在下个月交给老师n篇论文,论文的内容可以从m个课题中选择.由于课题数有限,Matrix67不得不重复选择一些课题.完成不同课题的论文所花的时间不同.具体地说,对于某个课题i,若Matrix67计划一共写x篇论文,则完成该课题的论文总共需要花费Ai*x^Bi个单位时间(系数Ai和指数Bi均为正整数).给定与每一个课题相对应的Ai和Bi的值,请帮助Matrix67计算出如何选择论文的课题使得他可以花费最少的

[无聊测试赛] T5 最佳课题选择

又是背包...(这题比黄还简单) 一维dp. \(i\) 表示现在拿了课题数, \(dp[i]\) 表示拿到n个课题的最小花费.将dp初始化大一点就行,记得开longlong #include <iostream> #include <algorithm> #include <math.h> #include <cstring> using namespace std; const long long MAXN = 2e2+5; long long n,m;

高光谱数据的最佳波段选择系统的程序设计与实现

程序员:左正康                发表时间:2013年12月7日16:11 一:系统开发背景:依据"不同地物成分具有各异的反射光谱特征"的原理,高光谱遥感技术则为侦测地物间的细微差别提供了物质基础和技术支持,也就为高精度的目标检测和分类提供了理论依据.在这方面,研究者己经开始将注意力从遥感数据的空间信息转向光谱信息. 不过,高光谱影像具有较高光谱分辨率的优越性是以较高的数据维数和比多光谱图像大得多的数据量为代价的,从而给高光谱影像的传输.存储.处理和分析等都带来较大的困难,

JavaScript最佳位置选择

高性能javascript 并行加载与顺序执行.Javascript文件(下面简称脚本文件)需要被HTML文件引用才能在浏览器中运行.在HTML文件中可以通过不同的方式来引用脚本文件,我们需要关注的是,这些方式的具体实现和这些方式可能会带来的性能问题. 首先,引用脚本必须用到<script>标签,我们需要了解<script>标签的特性,引述书中作者原话: 当浏览器遇到(内嵌)<script>标签时,当前浏览器无从获知Javascript是否会修改页面内容.因此,这时浏览

Delphi 的内存操作函数(1): 给字符指针分配内存( 给字符指针(PChar、PWideChar、PAnsiChar)分配内存最佳的选择是StrAlloc。分配内存的时候会对字符串进行初始化)

马上能想到的函数有: GetMem AllocMem ReallocMem FreeMem GetMemory ReallocMemory FreeMemory New Dispose NewStr DisposeStr StrNew StrAlloc StrDispose GlobalAllocPtr GlobalFreePtr WideStrAlloc AnsiStrAlloc StrDispose Move MoveMemory CopyMemory ZeroMemory FillMemo

大神刷题表

9月27日 后缀数组:[wikioi3160]最长公共子串 dp:NOIP2001统计单词个数 后缀自动机:[spoj1812]Longest Common Substring II [wikioi3160]最长公共子串 [spoj7258]Lexicographical Substring Search 扫描线+set:[poj2932]Coneology 扫描线+set+树上删边游戏:[FJOI2013]圆形游戏 结论:[bzoj3706][FJ2014集训]反色刷 最小环:[poj1734

无聊测试赛题解

无聊测试赛题解 首先膜拜_Zhumingrui大佬获得1000分的好成绩 T1 凯撒密码 T2 积木城堡 T3 出租车拼车 T4 汽车拉力比赛 T5 最佳课题选择 T6 排行榜 T7 豪华游轮 T8 佳佳的魔法药水 T9 矩阵覆盖 待填充 T10 所陀门王的宝藏 T11 老C的键盘 待填充 T12 道路 待填充 原文地址:https://www.cnblogs.com/DannyXu/p/12536283.html

2016年第2本:选择的悖论

生活中总会遇到大大小小的选择,人生就是一个做决定的过程.互联网时代,可选的东西更多了.可供选择的东西越多越好吗?如何在过多的选择中取舍?本书给出了11条建议. 我整理的笔记中有些内容借鉴了黑择明的读书笔记. 第1章:“小决定暴政”的受害者 生活中各种各样的选择让我们不知所措. 生活中遇到可选择的事情太多,买生活用品.买家电.淘宝.选学校.学生选课.选电视节目,都提供了数十.数百种选项,选项多了真的好吗?过多的选择会占据原本可以用于其他重要事情的时间和精力,因此反而会侵犯我们的自由.面临太多选择的