hdu 1203 转换的01包问题。。。。
俗话说的话 正难则反。,。 这个基本的思想都用不好的话 回家种田去吧。
#include<cstdio> #include<string.h> #include<iostream> using namespace std; double minn(double x,double y) { if(y<x) return y; else return x; } int main() { int n,m; int w[10010]; double p[10010]; double dp[10001]; while(cin>>n>>m) { if(n==0&&m==0) break; for(int i=1;i<=m;i++) { double x; cin>>w[i]>>x; p[i]=1-x; // cout<<p[i]<<endl; } dp[0]=1.000; for(int i=1;i<=n;i++) dp[i]=1.00; for(int i=1;i<=m;i++) { for(int j=n;j>=w[i];j--) { // cout<<dp[j]<<' '; dp[j]=minn(dp[j],dp[j-w[i]]*p[i]); // cout<<' '<<dp[j-w[i]]*p[i]<<' '<<dp[j]<<' '; } // cout<<endl; } double ans=(1-dp[n])*100; printf("%.1f%%\n",ans); } return 0; }