背包问题,发现这个东西很灵活。看来还是不够理解啊。
#include <stdio.h>
#define N 1024
struct knap
{
int w;
double v;
}a[N];
float dp[N*10+7];
int main()
{
int n, m, i, j;
while(scanf("%d%d", &n, &m) != EOF)
{
if(!n && !m)
break;
for(i = 1; i <= m; i++)
scanf("%d%lf", &a[i].w, &a[i].v);
for(i = 0; i <= n; i++)
dp[i] = 1;
for(i = 1; i <= m; i++)
for(j = n; j >= a[i].w; j--)
if(dp[j] > dp[j-a[i].w]*(1-a[i].v))
dp[j] = dp[j-a[i].w]*(1-a[i].v);
printf("%.1lf%%\n",(1-dp[n])*100);
}
return 0;
}