http://acm.hdu.edu.cn/showproblem.php?pid=1203
10 3 4 0.1 4 0.2 5 0.3 0 0
44.0%HintYou should use printf("%%") to print a ‘%‘.
#include<iostream>
#include<cstring>
#include<algorithm>
#define V 11111
#define N 1111
#define MAX(x,y) ((x)>(y)?(x):(y))
using namespace std;
double dp[V];
int c[N]; //每所学校花的钱
double w[N]; //概率
int main()
{
int n,v,i,j;
while(~scanf("%d%d",&v,&n))
{
if(v==0&&n==0)break;
for(i=0;i<n;i++)
{
scanf("%d%lf",&c[i],&w[i]);
}
memset(dp,0,sizeof(double)*(v+1)); //double型的初始化
for(i=0;i<n;i++)
{
for(j=v;j>=c[i];j--)
dp[j] = MAX(dp[j],w[i]+(1.0-w[i])*dp[j-c[i]]);//动态方程
}
printf("%.1lf%%\n",dp[v]*100);
}
return 0;
}杭电 1203 I NEED A OFFER!(01背包),布布扣,bubuko.com
原文:http://blog.csdn.net/u012766950/article/details/38360823