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 }
以上是关于P1336 最佳课题选择的主要内容,如果未能解决你的问题,请参考以下文章