当前位置: 首页 > news >正文

Codeforces Round #160 (Div. 2) D. Maxim and Restaurant(DP)

题目链接

想了挺久,枚举每一件物品,当做关键物品,假设再加这一件物品,就>=c了,把剩下的物品背一下包,dp[i][j]表示i个物品可以组成重量j的个数。

这样就可以知道前面放i件,后边肯定放n-i-1件,乱搞搞,算double,边乘边算保证不要越界。最后注意,LL和sum <= c的时候情况。

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <vector>
 5 #include <cmath>
 6 #include <algorithm>
 7 using namespace std;
 8 #define LL __int64
 9 LL dp[2][51][101];
10 int p[51];
11 int main()
12 {
13     int i,j,k,u,v,n,c,s1,s2,sum;
14     double ans = 0;
15     scanf("%d",&n);
16     sum = 0;
17     for(i = 1; i <= n; i ++)
18     {
19         scanf("%d",&p[i]);
20         sum += p[i];
21     }
22     scanf("%d",&c);
23     if(sum <= c)
24     {
25         printf("%d\n",n);
26         return 0;
27     }
28     for(i = 1; i <= n; i ++)
29     {
30         memset(dp,0,sizeof(dp));
31         dp[0][0][0] = 1;
32         s1 = 0;
33         s2 = 1;
34         for(j = 1; j <= n; j ++)
35         {
36             if(i == j) continue;
37             for(k = 0; k < j; k ++)
38             {
39                 for(u = 0; u <= 100; u ++)
40                     dp[s2][k][u] = dp[s1][k][u];
41             }
42             for(k = 0; k < j; k ++)
43             {
44                 for(u = 0; u < 100; u ++)
45                 {
46                     if(dp[s1][k][u])
47                     {
48                         if(u+p[j] <= 100)
49                             dp[s2][k+1][u+p[j]] += dp[s1][k][u];
50                     }
51                 }
52             }
53             swap(s1,s2);
54         }
55         for(j = 0; j < c; j ++)
56         {
57             if(j + p[i] >= c)
58             {
59                 for(k = 0; k < n; k ++)
60                 {
61                     if(dp[s1][k][j] == 0) continue;
62                     double temp = dp[s1][k][j];
63                     for(u = 1,v = k+1;u <= n-k-1;u ++,v++)
64                     temp *= u*1.0/v;
65                     temp /= n;
66                     if(j + p[i] == c)
67                     ans += temp*(k+1);
68                     else
69                     ans += temp*k;
70                 }
71             }
72         }
73     }
74     printf("%lf\n",ans);
75     return 0;
76 }

 

转载于:https://www.cnblogs.com/naix-x/p/3355941.html

相关文章:

  • [leetcode]Clone Graph
  • 风尘若幻_封装win7_sp3(终于可以和大家见面了,欢迎试用-谢谢支持!!!)
  • jsPlumb
  • Python学习 Part3:数据结构
  • 关于JAVA的守护进程
  • DWZ中Tree树形菜单的treeCheck如何获取返回值解决方案
  • Knockout.Js官网学习(options绑定)
  • 【译】手动处理Team Foundation Server 2010 数据仓库和分析服务数据库
  • 多系统开机流程
  • 《你不常用的c#之一》:略谈unsafe
  • JNI的method映射对应表
  • Visual Studio 2008 使用 WinCE 5.0 Emulator
  • 每日英语:How Often Do Gamblers Really Win?
  • core--线程状态
  • 纵向二级列表
  • 2019.2.20 c++ 知识梳理
  • 5分钟即可掌握的前端高效利器:JavaScript 策略模式
  • Android组件 - 收藏集 - 掘金
  • angular2开源库收集
  • classpath对获取配置文件的影响
  • exif信息对照
  • java中的hashCode
  • Redash本地开发环境搭建
  • spring boot下thymeleaf全局静态变量配置
  • SQLServer之创建数据库快照
  • 给自己的博客网站加上酷炫的初音未来音乐游戏?
  • 机器人定位导航技术 激光SLAM与视觉SLAM谁更胜一筹?
  • 解决jsp引用其他项目时出现的 cannot be resolved to a type错误
  • 利用DataURL技术在网页上显示图片
  • 手机端车牌号码键盘的vue组件
  • 首页查询功能的一次实现过程
  • 算法---两个栈实现一个队列
  • UI设计初学者应该如何入门?
  • ​Linux Ubuntu环境下使用docker构建spark运行环境(超级详细)
  • ​水经微图Web1.5.0版即将上线
  • ​云纳万物 · 数皆有言|2021 七牛云战略发布会启幕,邀您赴约
  • #在 README.md 中生成项目目录结构
  • (3)(3.2) MAVLink2数据包签名(安全)
  • (4)Elastix图像配准:3D图像
  • (DFS + 剪枝)【洛谷P1731】 [NOI1999] 生日蛋糕
  • (js)循环条件满足时终止循环
  • (WSI分类)WSI分类文献小综述 2024
  • (附源码)springboot社区居家养老互助服务管理平台 毕业设计 062027
  • (附源码)流浪动物保护平台的设计与实现 毕业设计 161154
  • (三)mysql_MYSQL(三)
  • (十八)SpringBoot之发送QQ邮件
  • (原創) 系統分析和系統設計有什麼差別? (OO)
  • (转) RFS+AutoItLibrary测试web对话框
  • (转)ORM
  • (转)visual stdio 书签功能介绍
  • (转载)CentOS查看系统信息|CentOS查看命令
  • .360、.halo勒索病毒的最新威胁:如何恢复您的数据?
  • .Net Winform开发笔记(一)
  • .Net 路由处理厉害了
  • .NET 指南:抽象化实现的基类