10 3 4 0.1 4 0.2 5 0.3 0 0
44.0%HintYou should use printf("%%") to print a ‘%‘.
自从集训后就没做过DP,先做个简单的,但是还没理解透,以后再自己研究研究....
AC代码:
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int maxn = 10005;
double dp[maxn];
int main()
{
int n, m, fee[maxn];
double pro[maxn];
while(scanf("%d %d", &n, &m), n || m)
{
memset(dp, 0, sizeof(dp));
for(int i=1; i<=m; i++)
{
scanf("%d %lf", &fee[i], &pro[i]);
}
for(int i=0; i<=n; i++)
dp[i] = 1.0;
for(int i=1; i<=m; i++)
{
for(int j=n; j>=fee[i]; j--)
{
if(dp[j] > dp[j-fee[i]]*(1.0-pro[i]))
dp[j] = dp[j-fee[i]]*(1.0-pro[i]);
}
}
printf("%.1lf%%\n", (1-dp[n])*100.0);
}
return 0;
}
HDU-1203-I NEED A OFFER! (简单DP!)
原文地址:http://blog.csdn.net/u014355480/article/details/41382087