zoukankan      html  css  js  c++  java
  • 题目:最佳课题选择

    题目描述

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

    输入格式

    第一行有两个用空格隔开的正整数n和m,分别代表需要完成的论文数和可供选择的课题数。
      以下m行每行有两个用空格隔开的正整数。其中,第i行的两个数分别代表与第i个课题相对应的时间系数Ai和指数Bi。
      对于30%的数据,n<=10,m<=5;
      对于100%的数据,n<=200,m<=20,Ai<=100,Bi<=5。

    输出格式

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

    题解:

    简单DP,不解释。

    View Code
     1 #include<iostream>
    2 using namespace std;
    3
    4 long long f[21][201];int n,m,a[21],b[21]; //关键在于long long 定义f[]
    5
    6 long long pow(int x,int y,int z){ //返回类型为 long long
    7 long long l=1;int t=z;
    8 while(t-->0)
    9 l*=y;
    10 return x*l;
    11 }
    12
    13 int main()
    14 {
    15 int i,j,k;
    16 cin>>n>>m;
    17
    18 for(i=1;i<=m;i++)
    19 cin>>a[i]>>b[i];
    20
    21 for(j=1;j<=n;j++)
    22 f[1][j]=pow(a[1],j,b[1]);
    23
    24 for(i=2;i<=m;i++)
    25 for(j=1;j<=n;j++)
    26 {
    27 f[i][j]=0xffffff;
    28 for(k=0;k<=j;k++)
    29 if(f[i-1][k]+pow(a[i],j-k,b[i])<f[i][j])
    30 f[i][j]=f[i-1][k]+pow(a[i],j-k,b[i]);
    31 }
    32
    33 cout<<f[m][n]<<endl;
    34 return 0;
    35
    36 }
  • 相关阅读:
    [CF1365D] Solve The Maze
    [CF478C] Table Decorations
    [CF466D] Increase Sequence
    [CF449D] Jzzhu and Numbers
    [CF507E] Breaking Good
    [CF337D] Book of Evil
    [CF1253E] Antenna Coverage
    VMware 在 Win10 下开机后死机的解决方案
    [CF1009F] Dominant Indices
    [CF1037E] Trips
  • 原文地址:https://www.cnblogs.com/noip/p/2363981.html
Copyright © 2011-2022 走看看