【概率+01背包】Just another Robbery

系统管理员 2022-05-31 12:45 283阅读 0赞

Think:
1知识点:【概率+01背包】
2题意:一个人去抢劫银行,当他的被捕概率小于P时才能行动,对于已存在的n个银行,每个银行含有属性w表示含有价值,属性p表示被捕概率,每个银行的被捕概率为独立的。询问在被捕概率小于P的前提,可以抢劫的最大价值。
3思路:
3.1:[将被捕概率转换为安全概率,即将被捕概率小于P的限制条件转换为安全概率不小于1-P] + [01背包体积:价值]

vjudge题目链接

以下为Accepted代码

  1. #include <cstdio>
  2. #include <cstring>
  3. #include <algorithm>
  4. using namespace std;
  5. struct Node{
  6. int w;
  7. double p;
  8. }rec[104];
  9. double dp[10414];
  10. int main(){
  11. int k = 1, T, V, n, i, j;
  12. double P;
  13. scanf("%d", &T);
  14. while(T--){
  15. scanf("%lf %d", &P, &n);
  16. P = 1 - P, V = 0;
  17. for(i = 0; i < n; i++){
  18. scanf("%d %lf", &rec[i].w, &rec[i].p);
  19. rec[i].p = 1 - rec[i].p, V += rec[i].w;
  20. }
  21. memset(dp, 0, sizeof(dp));
  22. dp[0] = 1;
  23. for(i = 0; i < n; i++){
  24. for(j = V; j >= rec[i].w; j--){
  25. dp[j] = max(dp[j], dp[j-rec[i].w]*rec[i].p);
  26. }
  27. }
  28. for(i = V; i >= 0; i--){
  29. if(dp[i] >= P){
  30. printf("Case %d: %d\n", k++, i);
  31. break;
  32. }
  33. }
  34. }
  35. return 0;
  36. }

发表评论

表情:
评论列表 (有 0 条评论,283人围观)

还没有评论,来说两句吧...

相关阅读

    相关 uva 11490 ——Just Another Problem

    题意:刚开始并没有看懂,耐着性子硬读下去,才勉强弄懂大意,英语也要加强训练啊! 题目是说你有s行c列士兵,然后带着他们去打仗,为了虚张声势,在士兵的中间缺了两个边长为r的洞

    相关 01背包,完全背包

    01背包问题:一个背包总容量为V,现在有N个物品,第i个 物品体积为weight\[i\],价值为value\[i\],现在往背包里面装东西,怎么装能使背包的内物品价值最大?

    相关 01背包

    > 题目:有一个背包,体积为m,现在给你n个石头,每个石头都有价值和体积,问这个背包可以装下多大价值的石头。 > > 输入: > 第一行两个整数n,m,分别代表石头的个数

    相关 01背包

    01背包 > 且说上一周的故事里,小Hi和小Ho费劲心思终于拿到了茫茫多的奖券!而现在,终于到了小Ho领取奖励的时刻了! > > 小Ho现在手上有M张奖券,而奖品区有N