n,m在n个里取m个.之后n先是分母,再是n个分子
code:
#include <iostream>
#include "memory.h"
using namespace std;
double dp[105][105];
double fenzi[105][105];
double fenmu[105][105];
double max(double a,double b)
{
if(a>b)
{
return a;
}else
{
return b;
}
}
struct ti
{
double rb;
double qz;
};
int main(int argc, char *argv[])
{
int m,n;
while(scanf("%d%d",&n,&m)!=EOF) //n个问题选取m个
{
ti t[105];
int i;
for(i=1;i<=n;i++)
{
scanf("%lf",&t[i].qz); //群众对问题的评价
}
for(i=1;i<=n;i++)
{
scanf("%lf",&t[i].rb); //弱B对问题的评价
}
memset(dp,0,sizeof(dp));
memset(fenzi,0,sizeof(fenzi));
memset(fenmu,0,sizeof(fenmu));
int j;
dp[1][1]=t[1].rb/t[1].qz;
fenzi[1][1]=t[1].rb;
fenmu[1][1]=t[1].qz;
for(i=2;i<=n;i++)
{
for(j=1;j<=i;j++)
{
dp[i][j]=max(dp[i-1][j],dp[i][j-1]+t[j].rb/t[j].qz); //前一个状态选j个问题和当前状态选j-1个问题加个当前价值的最大值
//即有没有选该问题
}
}
printf("%lf\n",dp[n][m]); //n个问题里选m个的最大值
}
return 0;
}