<更新提示>


<正文>

T1 Gift

Description

​ 人生赢家老王在网上认识了一个妹纸,然后妹纸的生日到了,为了表示自己的心 意,他决定送她礼物。可是她喜爱的东西特别多,然而他的钱数有限,因此他想 知道当他花一定钱数后剩余钱数无法再购买任何一件剩余物品(每种物品他最多 买一个)时有多少种方案,两种方案不同,当且仅当两种方案中至少有一件品不 同,可是由于他忙着准备泡下一个妹纸(chi),因此麻烦聪明的你帮帮忙。

Input Format

​ 输入第一行 n 和 m, n 表示妹纸喜欢的礼物数目, m 表示现有的钱数,第二行 n 个数,表示 n 个物品的价格。

Output Format

​ 输出一行一个数表示方案数目,答案对 1000000007 取模。

Sample Input

6 25
8 9 8 7 16 5

Sample Output

15

Hint

30%的数据: 0<=n<=100 0<=m<=500

100%的数据:0<=n<=1000 0<=m<=1000

注意:所有物品价格均小于 m

解析

如果存在一种合法的方案,就必然会有一个未购买并且价格最低的物品,并且这种方案的情况下,已经没有足够的钱来购买这个物品了。那么我们就以这个未购买的最小价格物品为基准点来统计答案,保证不重不漏。

我们先将所有物品按照价格从小到大排序,每次枚举一个物品\(i\),令这个物品作为上述未购买且价格最低的物品,然后,我们强制取第\(1\)到\(i-1\)个物品(如果不取,就和\(i\)个物品最小矛盾),并对第\(i+1\)到\(n\)个物品用\(0/1\)背包统计方案数,那么\(\sum_{j\in [m-a[i]+1,m]}f[j]\)即为本次的答案。

我们发现每一次\(dp\)都是对后面连续的若干个物品进行计算,于是我们就可以放弃背包中滚动数组的做法,从\(n\)开始倒序\(dp\),并记录每一个阶段的\(dp\)值,然后在上述统计答案的过程中直接使用预处理的\(dp\)值即可。这样,时间复杂度就从\(O(n^3)\)优化到了\(O(n^2)\)。

\(Code:\)

#include <bits/stdc++.h>
using namespace std;
const int N = 1020 , M = 1020;
const long long Mod = 1000000007;
int n,m,a[N];
long long f[N][M],ans,sum[N];
inline void input(void)
{
scanf("%d%d",&n,&m);
for (int i=1;i<=n;i++)
scanf("%d",&a[i]);
}
inline void dp(void)
{
memset( f , 0 , sizeof f );
f[n+1][0] = 1;
for (int i=n;i>=1;i--)
for (int j=0;j<=m;j++)
if ( j >= a[i] ) f[i][j] = ( f[i+1][j] + f[i+1][j-a[i]] ) % Mod;
else f[i][j] = f[i+1][j];
for (int k=1;k<=n;k++)
{
for (int i=m;i>=sum[k-1];i--)
f[k+1][i] = f[k+1][i-sum[k-1]];
for (int i=0;i<min(sum[k-1],1LL*m+1);i++)
f[k+1][i] = 0;
for (int i=m;i>=m-a[k]+1;i--)
ans = ( ans + f[k+1][i] ) % Mod;
}
}
int main(void)
{
input();
sort( a+1 , a+n+1 );
for (int i=1;i<=n;i++)
sum[i] = sum[i-1] + a[i];
dp();
if ( sum[n] > m ) printf("%lld\n",ans%Mod);
else puts("1");
return 0;
}

T2 Fseq

Description

​ 一个长度为 N+M 的数列,里面有 N 个+1,M 个-1 如果一个这样的数列被称作 F 序列(Fadeness) , 当且仅当它的任意前缀和均非 负。

for example :

1,-1,1,1,-1 is a Fadeness

1,-1,-1,1,1 is not because S(3) <0

求一个数列是 Fadensee 的概率。

Input Format

​ 第一行, Test , 表示测试数据的组数。 每个数据 有两个数 N,M

Output Format

​ 对于每组数据,输出一个实数(保留到小数点后 6 位)

Sample Input

3
1 0
0 1
1 1

Sample Output

1.000000
0.000000
0.500000

Hint

30%的数据: (Test<=10),(0<=N,M<=1000).

100%的数据: ( Test<=9008 ), ( 0<=N,M<=20000 ).

解析

和选举定理相似,我们直接转换成图形问题,然后应用反射原理即可。

我们将数列取数形象地转化为坐标系中的移动问题,一开始在原点,每取一个\(1\)就向右上方走一步,横纵坐标各加\(1\),取一个\(-1\)就向右下方走一步,横坐标加\(1\),纵坐标减\(1\),那么最终折线会走到点\((n+m,n-m)\)。

那么一旦折线接触到了直线\(y=-1\),这个序列就是不合法的。容易得出折线共有\(C_{n+m}^m\)种,那么问题在于求出不合法的折线数。

应用反射原理,由点\((0,-2)\)为起点,向右上走\(n+1\)次,向右下走\(m-1\)次,最终到点\((n+m,n-m)\)的所有折线就是不合法的折线数,我们同样可以得出这样的折线有\(C_{n+m}^{m-1}\)种。

那么答案就是\(\frac{C_{n+m}^m-C_{n+m}^{m-1}}{C_{n+m}^m}\),化简一下就是\(1-\frac{m}{n+1}\)。

\(Code:\)

#include<bits/stdc++.h>
using namespace std;
const int T = 10020 , N = 20020;
int t,n,m;
int main(void)
{
scanf("%d",&t);
while ( t-- )
{
scanf("%d%d",&n,&m);
if ( m > n ) puts("0.000000");
else printf("%.6lf\n", 1.0 - 1.0 * m / (n+1) );
}
return 0;
}

<后记>

『7.5 NOIP模拟赛题解』的更多相关文章

  1. 『7.3 NOIP模拟赛题解』

    T1 gift Description ​ 夏川的生日就要到了.作为夏川形式上的男朋友,季堂打算给夏川买一些生日礼物. ​ 商店里一共有种礼物.夏川每得到一种礼物,就会获得相应喜悦值Wi(每种礼物的喜 ...

  2. 大家AK杯 灰天飞雁NOIP模拟赛题解/数据/标程

    数据 http://files.cnblogs.com/htfy/data.zip 简要题解 桌球碰撞 纯模拟,注意一开始就在袋口和v=0的情况.v和坐标可以是小数.为保险起见最好用extended/ ...

  3. 10.6-10.7 牛客网NOIP模拟赛题解

    留个坑... upd:估计这个坑补不了了 如果还补不了就删了吧

  4. NOIP第7场模拟赛题解

    NOIP模拟赛第7场题解: 题解见:http://www.cqoi.net:2012/JudgeOnline/problemset.php?page=13 题号为2221-2224. 1.car 边界 ...

  5. contesthunter暑假NOIP模拟赛第一场题解

    contesthunter暑假NOIP模拟赛#1题解: 第一题:杯具大派送 水题.枚举A,B的公约数即可. #include <algorithm> #include <cmath& ...

  6. 队爷的讲学计划 CH Round #59 - OrzCC杯NOIP模拟赛day1

    题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的讲学计划 题解:刚开始理解题意理解了好半天,然后发 ...

  7. 队爷的Au Plan CH Round #59 - OrzCC杯NOIP模拟赛day1

    题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的Au%20Plan 题解:看了题之后觉得肯定是DP ...

  8. 队爷的新书 CH Round #59 - OrzCC杯NOIP模拟赛day1

    题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的新书 题解:看到这题就想到了 poetize 的封 ...

  9. CH Round #58 - OrzCC杯noip模拟赛day2

    A:颜色问题 题目:http://ch.ezoj.tk/contest/CH%20Round%20%2358%20-%20OrzCC杯noip模拟赛day2/颜色问题 题解:算一下每个仆人到它的目的地 ...

随机推荐

  1. Android中实现Activity的透明背景效果

    实现方式一(使用系统透明样式) 通过配置 Activity 的样式来实现,在 AndroidManifest.xml 找到要实现透明效果的 Activity,在 Activity 的配置中添加如下的代 ...

  2. 定时任务突然中止,告警:Thread starvation or clock leap detected

    1.背景 定时任务告警信息如下: 02:38:24.112 [HikariPool-1 housekeeper] WARN  com.zaxxer.hikari.pool.HikariPool - H ...

  3. SQLServer2017自动备份数据库

    本文截图来源: 地址一:https://blog.csdn.net/u010944388/article/details/86674078 地址二:https://www.cnblogs.com/ja ...

  4. MySQL数据逻辑备份

    逻辑备份: 备份的是建表.建库.插入等操作所执行SQL语句,适用于中小型数据库,效率相对较低. mysqldump mydumper使用mysqldump实现逻辑备份 语法: # mysqldump ...

  5. 嵌入式linux开发uboot启动内核的机制(二)

    一.嵌入式系统的分区 嵌入式系统部署在Flash设备上时,对于不同SoC和Flash设备,bootloader.kernel.rootfs的分区是不同的.三星S5PV210规定启动设备的分区方案如下: ...

  6. 第04节-BLE协议抓包演示

    在上几篇博客中,形象的讲解了BLE各个层的作用,各个层的数据结构.本篇博客将研究BLE协议抓包.在实际开发中,有一个中央设备(central)和一个外设(Peripheral).所谓中央设备就是指它可 ...

  7. Kibana 的 docker 镜像使用

    1.dockhub镜像网址:https://hub.docker.com/_/kibana 2.下载镜像: docker pull kibana:7.4.0 3.创建容器(Kibana 默认的端口为5 ...

  8. 【转】编写高质量代码改善C#程序的157个建议——建议56:使用继承ISerializable接口更灵活地控制序列化过程

    建议56:使用继承ISerializable接口更灵活地控制序列化过程 接口ISerializable的意义在于,如果特性Serializable,以及与其像配套的OnDeserializedAttr ...

  9. ESA2GJK1DH1K基础篇: 阿里云物联网平台: 测试MQTT客户端接收云平台的数据

    前言 有时候想想可能直接连接现成的感觉比较方便吧! 这种东西考验的是你底子是否够好,是否有很强的学习能力 因为咱就是看文档,理解文档.用文档. 测这节会感觉:这是啥呀...下一节更精彩,但是必须看这节 ...

  10. 【转】C++11新特性——lambda表达式

    C++11的一大亮点就是引入了Lambda表达式.利用Lambda表达式,可以方便的定义和创建匿名函数.对于C++这门语言来说来说,“Lambda表达式”或“匿名函数”这些概念听起来好像很深奥,但很多 ...