HDU_1203 I NEED A OFFER!

  背包问题,发现这个东西很灵活。看来还是不够理解啊。

#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;
}
posted @ 2011-08-05 20:38  AC_Von  阅读(180)  评论(0编辑  收藏  举报