HDU 5396 Expression(区间DP,排列组合)

SDUT3173 有多少个连续子序列的和能被k整除 题目描述 Edward 得到了一个长度为 N 的整数序列,他想找出这里面有多少个“幸运的”连续子序列。一个连续子序列被称为“幸运的”,当且仅当该子序列内的整数之和恰好是 K 的整数倍数。他请求你写一个程序来计算他喜欢的连续子序列个数。 输入  输入第一行是一个整数 T,表示有 T 组数据。 每组数据第一行是两个整数 N (1 接下来的一行包含 N 个整数 A i (|A 阅读详情

http://acm.hdu.edu.cn/showproblem.php?pid=5396

思路很特别。大神的详细题解:http://www.cnblogs.com/chenchengxun/p/4741439.html

对于加减法,分成左右两块的话,对于左边的某一种运算情况,都要和右边的所有情况匹配,所以【左边】*【右边的全排列】。右边同理。

特别拎出来 乘法为什么不用乘上全排列:

假设我们dp[i][k] 里面所有的值是 (x1+x2+x3...xn)
假设我们dp[k+1][j] 里面所有的值是 (y1+y2+y3...yn)
dp[i][k] * dp[k+1][j] = (x1+x2+...xn) * (y1+y2+y3...yn) = x1*y1+...+x1*yn+x2*y1+...+x2*yn+xn*y1+...+xn*yn 无论怎么变换左(右)边的运算顺序,相乘出来的结果都是是一样的

最后要对结果乘上一个组合数。因为可以先算一会左边再算一会右边。

#include<iostream>
#include<algorithm>
#include<string>
#include<map>//int dx[4]={0,0,-1,1};int dy[4]={-1,1,0,0};
#include<set>//int gcd(int a,int b){return b?gcd(b,a%b):a;}
#include<vector>
#include<cmath>
#include<stack>
#include<string.h>
#include<stdlib.h>
#include<cstdio>
#define mod 1000000007
#define ll long long
using namespace std;
ll x[105];
int y[105];
ll dp[105][105];
ll A[105],C[105][105];
int main(){
	A[0]=1;
    for(int i=1;i<=100;i++)
        A[i]=(A[i-1]*i)%mod;
    C[0][0]=1;
    for(int i=1;i<=100;i++){
        C[i][0]=1;
        for(int j=1;j<=i;j++)
            C[i][j]=(C[i-1][j-1]+C[i-1][j])%mod;
    }
	int n;
	while(~scanf("%d",&n)){
		memset(dp,0,sizeof(dp));
		for(int i=1;i<=n;++i){
			cin>>x[i];
		}
		getchar();
		char c;
		for(int i=1;i<=n-1;++i){
			cin>>c;
			if(c=='-')
				y[i]=0;
			else if(c=='+')
				y[i]=1;
			else if(c=='*')
				y[i]=2;
		}
		for(int i=1;i<=n;++i)
			dp[i][i]=x[i];
		for(int i=2;i<=n;++i){
			for(int l=1;l<=n-i+1;++l){
				int r=l+i-1;
				ll ans;
				for(int k=l;k<r;++k){
					if(y[k]==0)
						ans=(dp[l][k]*A[r-k-1]-dp[k+1][r]*A[k-l])%mod;
					else if(y[k]==1)
						ans=(dp[l][k]*A[r-k-1]+dp[k+1][r]*A[k-l])%mod;
					else
						ans=(dp[l][k]*dp[k+1][r])%mod;
					dp[l][r]=(dp[l][r]+ans*C[(k-l)+(r-k-1)][k-l])%mod;
	//				cout<<l<<" "<<r<<" /"<<dp[l][r]<<endl;
				}
			}
		}
		cout<<(dp[1][n]+mod)%mod<<endl;
	}
    return 0;
}


每次可以从里面拿出一个放在最前(或最后),求最小的次数把数列排好序 每次可以从里面拿出一个放在最前或最后,求最小的次数把数列排好序 http://codeforces.com/problemset/problem/606/C #include #define ll long long using namespace std; int x[100005]; int main(){ int n,a,maxx=0; cin>>n; for(int i= 阅读详情

相关推荐

FFmpeg实战:5分钟搞定m3u8视频下载与ts文件合并(附完整命令)

本文详细介绍了如何使用FFmpeg快速下载m3u8视频并合并ts文件为mp4格式。通过简洁的命令行操作,读者可以轻松完成视频处理任务,包括环境准备、链接获取、下载合并及性能优化等实用技巧,特别适合需要高效处理流媒体内容的用户。

weixin_30836759的博客 221

hdu5396 Expression 区间dp +排列组合

#include #include #include #include #include #include #include #include #include using namespace std; const int N=105; const int MOD=1e9+7; int n; int a[N]; char ch[N]; void rd(int&x){ char ch;

zjck1995的专栏 833

基于卷积神经网络的人脸表情识别(JAFFE篇)

1.win10/11操作系统2.python3.7以上3.tensorflow2.4以上版本(2.0其它版本需要微调)4.内存12G,显卡4G以上(没有独显倒是也能跑...)(这个可爱的妹子就是JAFFE数据集中的图片)

小林同学的计算机学习 5914

HDU5396——区间DP+排列组合——Expression

http://acm.hdu.edu.cn/showproblem.php?pid=5396 /* 题目大意:给你一些表达式,问你不考虑乘除优先级,问所有可能性之和为多少 比方说 (1+2)+3 1+(2+3) 算不同 定义dp[i][j] 表示从i到j之和 令k为两个表达式之间的符号 如果k为* 状态转移方程 dp[i][j] = (dp[i][j] + dp[...

dgjm4087的博客 159

SpringBoot 指标监控——Actuator

1、 访问:localhost:8000/actuator 设置健康监控显示具体情况 metrics http://localhost:8000/actuator/metrics/jvm.gc.live.data.size 定制化health信息 //利用构造器,在注册中心中添加cityService.saveCity.count指标 public CityServiceImpl(MeterRegistry meter...

weixin_44302046的博客 4630

Cadence 17.2 OrCAD原理图库实战:从零创建电阻/电容/LED元件(附封装技巧)

本文以Cadence 17.2 OrCAD为核心,详细讲解了如何从零开始工程化地创建电阻、电容、LED等原理图库元件。内容涵盖库架构设计、符号绘制、引脚属性管理、封装关联技巧以及设计规则检查,旨在帮助硬件工程师构建规范、可复用且易于维护的元件库,为高效PCB设计奠定坚实基础。

weixin_29195615的博客 400

hdu 5396 Expression 区间DP+排列组合 2015 Multi-University Training Contest 9

Expression Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 453    Accepted Submission(s): 264 Problem Description Teacher Mai has n

便纵有千种风情 558

揭秘Synopsys EDA中的AI黑科技:DSO.ai如何改变传统芯片设计流程

本文深入探讨了Synopsys EDA中的AI黑科技DSO.ai如何革新传统芯片设计流程。通过数据驱动的方法论、功耗优化革命和时序收敛智能加速,DSO.ai显著提升了设计效率和质量,实现了从经验驱动到AI驱动的范式转变。文章还提供了实战指南,帮助团队跨越AI EDA的实施鸿沟。

weixin_29296241的博客 527

HDU 5396 Expression (MUT#9 区间DP)

【题意】:click here~~ 【题目大意】: 给你一个一行包含n(2= 【思路】:区间DP: 先贴一下题解(感觉题解有个地方写错了): 设DP[l][r]:表示区间【l,r】这段里面能形成的答案的总数。  枚举最后一步的操作k,那么对乘法:答案为DP[i,k]*DP[k+1,r],由于分配律这个会乘开来,如果是加法,那么答案就是DP[i][k]*(j-k-1)!+DP[k+1][

herongwei 的 BLOG 1093

【2021末九软工边缘人保研】川大-中科院网络中心-华师夏令营+哈工大本-中科院网络中心-西交-厦大-中山-武大-北航预推免

2021末九软工边缘人保研记录一、写在前面二、个人背景 一、写在前面 2020年计算机保研可谓是诸神黄昏,卷的头破血流(指我等菜鸡)。疫情的原因,今年的夏令营和预推免基本全部改为线上,机试取消,能不能拿到offer基本完全取决于背景以及面试表现(当然也有个别头铁非要机试,甚至笔试的学校)。大佬们offer收割不停,我等边缘人只能看着一封封拒信发呆。 这种情况下,只有985 Rank5%以及211 Rank2%之前的大佬能够较为轻松地拿到面试入场券。贴一个上交电院夏令营要求你们感受一下: 预推免相比起夏令营

weixin_43222706的博客 4235

RK3568实现蓝牙音箱功能

A2DP旨在通过蓝牙连接传输高质量的立体声音频流。它使用的基本压缩算法是SBC(Sub-Band Coding)来减小音频数据的大小,同时保持高音质,SBC压缩虽然效率较低,但是是必须支持的基本备用方案。A2DP还支持其他高级编解码器,例如AAC、aptX和LDAC,这些编解码器比SBC提供更好的音质,但这些编解码器的支持取决于设备本身的支持情况。注意A2DP协议要与AVRCP协议区分开。A2DP是传输音频的,而AVRCP是用来控制音频的。这里我用到的是RK3568 Android11。

leikko的博客 1175

HDU 5396 Expression (区间DP)

链接 : http://acm.hdu.edu.cn/showproblem.php?pid=5396 设d[i][j] 代表i~j的答案。区间DP枚举(i, j)区间的断点,如果断点处的操作符是‘*’,那么该区间的答案可以直接加上d[i][k] *  d[k+1][j],因为乘法分配律可以保证所有的答案都会乘起来。如果是加法,需要加的 就是 左边的答案 乘 右边操作数的阶乘 加上 右边的答案乘

__ElemenT 757

Python爬虫实战:利用最新技术高效爬取百度贴吧帖子内容

本文将详细介绍如何使用Python最新技术栈构建一个高效的百度贴吧爬虫,包括requests-html异步请求、BeautifulSoup4解析、数据存储到MongoDB以及应对反爬机制等完整解决方案。文章包含5000余字详细教程和完整代码实现。网络爬虫(Web Crawler)是一种自动获取网页内容的程序,广泛应用于搜索引擎、数据分析和内容聚合等领域。Python凭借其丰富的库生态系统成为爬虫开发的首选语言。贴吧作为中文互联网最大的兴趣社区,包含大量有价值的UGC内容。动态加载内容处理登录状态维持。

2201_76125261的博客 541

HDU5396 - Expression - 区间dp、组合数学

Expression 题目链接 分类:区间dp、组合数学 1.题意概述 给你n(2≤n≤100)n(2≤n≤100)个数和对应(n−1)(n-1)个操作符,你每次给操作符相邻两个数加括号直到运算结束,问你最终的方案结果数的和,答案模109+710^9+7。 2.解题思路n个操作符,计算顺序的排列组合有n!n!种,根据n的范围显然搜索的复杂度是不能接受的,我们考虑区间dp:dp[i][j

终有绿洲摇曳在沙漠 420

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

hdu 5396 Expression(区间dp)

Problem Description Teacher Mai has n numbers a1,a2,⋯,anand n−1 operators("+", "-" or "*")op1,op2,⋯,opn−1, which are arranged in the form a1 op1 a2 op2 a3 ⋯ an.He wants to erase numbers one by one. I...

weixin_34008805的博客 80

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

hdu 5396 Expression

考虑到此题麻烦了某hust大神&体现出了自己数学能力的欠缺 虽然最近一直比较忙 还是把这题的题解写下来吧 首先看完数据范围后 应该有不少人会反应到是$n^3$的DP 以$F[i][j]$表示从i到j这个区间所有情况之和 然后再枚举中间点$k$从$F[i][k]$到$F[k+1][j]$转移过来 但此题绝不是想到DP就可以了 ------------------------------...

weixin_30819163的博客 151

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

2015 Multi-University Training Contest 9 hdu 5396 Expression

题意:一个表达式,加不同的括号得到不同的计算顺序,只要有一个计算顺序不同这两个表达式就是不同的。求所有表达式的和。 区间dp +排列组合 一开始我就知道大概可以用区间dp解决,开个二维记录区间[l,r]的所有方案的总和,然后枚举最后一次操作的符号,把每个区间分为两半,因为左边区间的总和可能有几种情况相加而得到a1,a2,a3,我们把其和保存在数组d【l】【k】,k是枚举的,代表最后

chen_lin111的专栏 472

hznu 1524 排队买票(dp)【类卡特兰构造】

有M个小孩到公园玩,门票是1元。其中N个小孩带的钱为1元,K个小孩带的钱为2元。售票员没有零钱,问这些小孩共有多少种排队方法,使得售票员总能找得开零钱。注意:两个拿一元零钱的小孩,他们的位置互换,也算是一种新的排法。(M&lt;=10)输入输入一行,M,N,K(其中M=N+K,M&lt;=10)。输出输出一行,总的排队方案。样例输入4 2 2样例输出8http://hsacm.cn/JudgeOn...

芒果街上的小屋(此博客暂时停用) 2944

poj1426 Find The Multiple(哈夫曼思想)

Given a positive integer n, write a program to find out a nonzero multiple m of n whose decimal representation contains only the digits 0 and 1. You may assume that n is not greater than 200 and there

芒果街上的小屋(此博客暂时停用) 2083

在O(logn)时间内找到数组中离每个数最近而又比它大的数的下标

题目描述   Farmer Zhao's N cows (1 ≤ N ≤ 1,000,000) are lined up in a row. So each cow can see the nearest cow which is taller than it. You task is simple, given the height (0 9) of each cow lined up i

芒果街上的小屋(此博客暂时停用) 1880

是否可以删除一个字母之后变成回文串

题目描述 给出一个字符串,仅由小写字母组成。请找出是否仅删除其中的一个字母之后, 字符串变成回文串。 输入 输入第一行是一个整数 T,表示有 T 组数据。 每组数据占一行,每行包含一个非空字符串,字符串长度不超过 105 。   输出 对于每组测试数据,输出一行包含一个整数 K ,表示删除字符串中第 K 个字 

芒果街上的小屋(此博客暂时停用) 1786

从n到m,有-1和*2两种操作。问最少走几步

从n到m,有-1和*2两种操作。问最少走几步。 这题必须从m来逆向考虑。 #include using namespace std; int main(){ int count =0; int m,n; cin>>n>>m; while(n < m){ if(m%2) m++; else m/=2; count++; } cout<<count+n-m<

芒果街上的小屋(此博客暂时停用) 1735

CF 549H. Degenerate Matrix(二分,退化矩阵灵活题)

The determinant of a matrix 2 × 2 is defined as follows: A matrix is called degenerate if its determinant is equal to zero. The norm ||A|| of a matrix A is defined as a maximum of absolute v

芒果街上的小屋(此博客暂时停用) 1711
上一篇: hdu5544 Pick The Sticks(dp)
下一篇: HDU 5353 Average(破解环的做法是枚举起始点の操作,灵活题)
ccyy-
博客等级 码龄12年 31粉丝 244原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值