hdu 2955 Robberies
题目:http://acm.hdu.edu.cn/showproblem.php?pid=2955
思路:裸的01背包
已知被抓的概率,因为不是相互独立的,一次被抓就不用讨论了,所以我们讨论不被抓的最大概率。

#include <cstdio> #include <iostream> #include <cmath> #include <algorithm> #include <cstring> using namespace std; double dp[10010],P,p[110]; int money[110]; int main() { int t; scanf("%d",&t); while(t--) { int n; scanf("%lf%d",&P,&n); int sum=0; for(int i=1;i<=n;i++) { scanf("%d%lf",&money[i],&p[i]); sum+=money[i]; } memset(dp,0,sizeof(dp)); dp[0]=1; for(int i=1;i<=n;i++) for(int j=sum;j>=money[i];j--) dp[j]=max(dp[j],(1-p[i])*dp[j-money[i]]); int mx=0; for(int i=sum;i>=0;i--) { if(dp[i]>=1-P) { mx=i; break; } } printf("%d\n",mx); } return 0; }
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步