P1336 最佳课题选择

Posted pangbi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了P1336 最佳课题选择相关的知识,希望对你有一定的参考价值。

题意:给出我们需要学的科目数,给出m种不同的科目,n<=m

    即可以学的科目数小于我们需要学的科目数,也就是说我们需要多次学同一门科目

      计算学习某门科目的时间为:技术图片

 

        求如何学习才能让时间最低;

思路:给出dp【i】【j】表示选择前i种科目学习j次所花最少时间

   

技术图片
 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 typedef long long ll;
 4 const int maxn=2e3+10;
 5 ll dp[maxn][maxn];
 6 ll a[maxn],b[maxn];
 7 ll qpow(ll x,ll y)
 8 {
 9     ll sum=1;
10     while(y){
11         if(y&1) sum=sum*x;
12         x=x*x;
13         y/=2;
14     }
15     return sum;
16 }
17 int main()
18 {
19     int n,m;
20     scanf("%d%d",&n,&m);
21     for(int i=1;i<=m;i++){
22         scanf("%lld%lld",&a[i],&b[i]);
23     }
24     for(int i=1;i<=n;i++)
25         dp[1][i]=a[1]*qpow(i,b[1]);
26     for(int i=1;i<=m;i++)
27         dp[i][0]=0;
28     for(int i=2;i<=m;i++){
29         for(int j=1;j<=n;j++){
30             int tot=j;
31             dp[i][j]=a[i]*qpow(j,b[i]);
32             for(int k=0;k<tot;k++){
33                 dp[i][j]=min(dp[i][j],dp[i-1][tot-k]+a[i]*qpow(k,b[i]));
34             }
35         }
36     }
37     printf("%lld
",dp[m][n]);
38     return 0;
39 }
View Code

 

以上是关于P1336 最佳课题选择的主要内容,如果未能解决你的问题,请参考以下文章

P1336 最佳课题选择

最佳课题选择

线性DPlgP1336最佳课题选择

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

在一些片段之间填充对象变量的最佳方法

iphone / Objective c的最佳代码片段网站是啥[重复]