背景:01背包,开始尽然忘了01背包的内循环是倒着来的=_=
我的代码:
#include<cstdio> #include<iostream> #include<cstring> using namespace std; int c[10009]; double w[10009],F[10009]; int main(void){ int n,m; while(scanf("%d%d",&n,&m) && n*n+m*m){ for(int i=0;i < m;i++) scanf("%d%lf",&c[i],&w[i]); for(int i=0;i <= n;i++) F[i]=1.0; for(int i=0;i < m;i++){ for(int j=n;j >= c[i];j--){ F[j]=min(F[j],F[j-c[i]]*(1-w[i])); } } printf("%.1lf%%\n",(1-F[n])*100); } return 0; }
时间: 2024-11-24 18:24:14