10 3 4 0.1 4 0.2 5 0.3 0 0
44.0%HintYou should use printf("%%") to print a '%'.
思路:01背包,注意n,m范围包括0就好了......WA好几次才发现......果然不能熬夜......
AC代码:
#include <iostream> #include <cstdio> using namespace std; typedef long long LL; #define max(a,b) (a>b?a:b) #define min(a,b) (a<b?a:b) double dp[10005]; int main() { int T,n,V,b[10005]; double a[10005]; //while(cin>>V>>n&&n&&V)一开始就因为这样WA了。。。 while(cin>>V>>n) { if(n==0&&V==0) break; for(int i=0;i<10005;++i) { dp[i]=1; } for(int i=1;i<=n;++i) { cin>>b[i]>>a[i]; a[i]=1.0-a[i]; } for(int i=1;i<=n;++i) { for(int j=V;j>=b[i];--j) { dp[j] = min(dp[j-b[i]]*a[i],dp[j]); } } printf("%.1lf%%\n",(1.0-dp[V])*100.0); } return 0; }