dp练习(11)——石子并归】的更多相关文章

题意: 给你一个多边形(可以看作n个顶点,n-1条边的图),每一条边上有一个符号(+号或者*号),这个多边形有n个顶点,每一个顶点有一个值 最初你可以把一条边删除掉,这个时候这就是一个n个顶点,n-2条边的图 如果顶点i和j之间有边,那么你可以把i点和j点合并成一个点,把这个点替换掉i.j两个点,这个新点的值是i+j 或者 i*j (这个是要看连接i和j两点的边上的符号) 经过若干次操作之后剩下一个点,这个点的值最大是多少 题解: 这道题目和石子合并题目很相似,这里先说一下石子合并 题目: 有N…
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3777 Time Limit: 2 Seconds      Memory Limit: 65536 KB The 11th Zhejiang Provincial Collegiate Programming Contest is coming! As a problem setter, Edward is going to arrange the order…
题目描写叙述 Description 在一个园形操场的四周摆放N堆石子,现要将石子有次序地合并成一堆.规定每次仅仅能选相邻的2堆合并成新的一堆,并将新的一堆的石子数,记为该次合并的得分. 试设计出1个算法,计算出将N堆石子合并成1堆的最小得分和最大得分. 输入描写叙述 Input Description 数据的第1行试正整数N,1≤N≤100,表示有N堆石子.第2行有N个数,分别表示每堆石子的个数. 输出描写叙述 Output Description 输出共2行,第1行为最小得分,第2行为最大得…
题目描述 在一个圆形操场的四周摆放 N 堆石子,现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆合并成新的一堆,并将新的一堆的石子数,记为该次合并的得分. 试设计出一个算法,计算出将 N 堆石子合并成 1 堆的最小得分和最大得分. 输入格式 数据的第 1 行是正整数 N,表示有N堆石子. 第 2 行有 N 个整数,第 i 个整数 ai​ 表示第 i 堆石子的个数. 输出格式 输出共 2 行,第 1 行为最小得分,第 2 行为最大得分. 规定一个划分线,i到j个石子所能得到的最大得分和最小得…
今天又是长者给我们讲小学题目的一天 长者的讲台上又是布满了冰红茶的一天 ------------------------------------------------------------------------------------------------------------------------------------- 正片开始 动态规划 动态规划是个抽象的东西. 接下来的例子小部分可能会比较搞笑 我们先来看一个严肃的例子,来认识一下什么是DP: 斐波那契数列: 大家都知道斐波…
题目链接 XOR 游戏 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 256    Accepted Submission(s): 86 Problem Description众所周知,度度熊喜欢XOR运算[(XOR百科)](http://baike.baidu.com/view/674171.htm). 今天,它发明了一种XOR新游戏…
#include <bits/stdc++.h> typedef long long LL; const int MOD = (int)1e9 + 7; LL L,R,G,T; int dp[62 + 1][2][2][2][2]; bool vis[62 + 1][2][2][2][2]; inline void add(int &a,int b) { a += b; if (a >= MOD) a -= MOD; if (a < 0) a += MOD; } int c…
题意:给n(n<=100,000)个数,0<=a[i]<=2048 .一个好的集合要满足,集合内的数可以根据2048的合并规则合并成2048 .输出好的集合的个数%998244353 . 比赛的时候想着1跟3可以合并成4 ....然后就越搞越复杂了.....2048玩得不多的我没有透彻的合并规则概念..... 看了题解写了发,妥妥地TLE...本地随意n=100,000都TLE了... 用dp[i][j]表示当前 i个2^j 的方案数 然后队友提醒优化,就是,当枚举到比如,value =…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5898 题意:很明确,找出区间[l , r]中符合连续奇数为偶数,连续偶数为奇数的个数. 思路:dp[i][j][1]表示i位数j开头符合条件的数,dp[i][j][0]表示i位数j开头(之后)可能符合条件的数. #include<cstdio> #include<cstring> using namespace std; typedef long long ll; ll dp[22][…
区间dp, 属于dp的一种,顾名思义,便是对区间处理的dp,其中石子归并,括号匹配,整数划分最为典型. (1)石子归并 dp三要素:阶段,状态,决策. 首先我们从第i堆石子到第j堆石子合并所花费的最小费用设为dp[i][j], 然后去想状态转移方程,dp[i][j]必然有两堆石子合并而来, 那么我们很快就可以推出状态转移方程为dp[i][j] = min(dp[i][j], dp[i][k] + dp[k+1][j] + s);(s为两堆石子的总和) 下面附上代码 #include <cstdi…
开始想用dp[i][j]来记录第i位j开头含有49的数的个数 但是init后并不知道如何进行cal 想了想可以用不要62的思想 当作不要49来做 然后减一下 就好 看网上的代码 不要62和这道题用的dp方法和cal都与我用的有很大不同 做完入门水题就去学习一下那种很正规的方法~ #include<stdio.h> #include<string.h> #include<algorithm> #include<map> #include<math.h&g…
记录最晚时间 从time为2枚举到最晚时间 每个时间段的x轴节点都等于上一个时间段的可触及的最大馅饼数 #include<stdio.h> #include<string.h> #include<algorithm> #include<map> #include<math.h> using namespace std; int dp[100050][11]; int a[100050][11]; void init() { memset(a,0,…
题目大意:一个矩阵,只能放1*2的木块,问将这个矩阵完全覆盖的不同放法有多少种. 解析:如果是横着的就定义11,如果竖着的定义为竖着的01,这样按行dp只需要考虑两件事儿,当前行&上一行,是不是全为1,不是说明竖着有空(不可能出现竖着的00),另一个要检查当前行里有没有横放的,但为奇数的1. 原代码链接:http://blog.csdn.net/accry/article/details/6607703 首先我个人感觉,横着是11,竖着是01 这个方法很牛逼,然后就是先预处理ok数组,之后就要判…
题目大意:10个点的TSP问题,但是要求每个点最多走两边,不是只可以走一次,所以要用三进制的状态压缩解决这个问题.可以预处理每个状态的第k位是什么. 原代码链接:http://blog.csdn.net/accry/article/details/6607703 3进制,代表走过这个点的次数 #include <cstdio> #include<cstdlib> #include <cstring> #define INF 0x1f1f1f1f #define min(…
题是看了这位的博客之后理解的,只不过我是又加了点简单的注释. 链接:http://blog.csdn.net/chinaczy/article/details/5890768 我还加了一些注释代码,对于新手的我,看起来可能更方便些吧,顺便说下快捷键 先选中要操作的行,ctrl+shift+c 是注释 ctrl+shift+x是解注释(cb的快捷键) /* Floyd + 状态压缩DP 题意是有N个城市(1~N)和一个PIZZA店(0),要求一条回路,从0出发,又回到0,而且距离最短 也就是TSP…
男神的礼物 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/problem/show/1131 Description Lweb学长是集训队里公认的男神.有一天他要给美美的学姐姐准备礼物. Lweb学长可是会魔法的哟.为了准备一份礼物,男神要加工n份材料.每一次只能加工相邻的材料. 当男神加工两个魔法值为a,b的材料,男神都要消耗a*b的体力,同时在这个地方合成出魔法值(a+b)0的材料. 男神为了能节…
这个问题要看状态怎么想,第一种直接的想法是1代表未合并,状态就从1111111 转移到 带有1个0,然后带有两个0, 但是这样子编程非常不直观.换一种思路,0代表未合并,但是我可以先合并前几个,就是说在压缩状态的过程中,状态转移的时候尽量是一个连续量的转化 #include <iostream> #include <cmath> #include <cstring> using namespace std; int cost[11][11]; int dp[1<&…
把数组竖起来,从上往下走. 如果当前位置是竖着乘的,那么第一个点标记为1.否则标记为0. 样例最终的状态为: 0 0 1 0 1 0 1 0 0 0 0 0 #include<iostream> #include<cmath> #include<algorithm> #include<stdio.h> #include<string.h> #define max(a,b) ((a)>(b)?(a):(b)) using namespace…
[HDU  3555]原题直通车: 代码: // 31MS 900K 909 B G++ #include<iostream> #include<cstdio> #include<cstring> using namespace std; int a[20]; __int64 dp[20][11]; void digit_dp() { memset(dp, 0LL, sizeof(dp)); dp[0][0]=1; for(int i=1; i<20; ++i)…
标题效果: 举个很多种DNA弦,每个字符串值值至1.最后,一个长字符串.要安排你最后一次另一个字符串,使其没事子值和最大. IDEAS: 首先easy我们的想法是想搜索的!管她3721..直接一个字符一个字符的码,然后在AC自己主动机上推断最后的权值.TLE哟. 然后发现搜过不去.那就dp咯.再easy想到的就是dp[i][a][b][c][d] 表示此时遍历AC自己主动机的节点在i,然后构成了a个A,b个G,c个C.d个T的权值. 再一看内存,500*40*40*40*40...然后...就没…
Bomb Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others) Total Submission(s): 10419    Accepted Submission(s): 3673 Problem Description The counter-terrorists found a time bomb in the dust. But this time the terrorist…
Lost's revenge Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others)Total Submission(s): 3757    Accepted Submission(s): 1020 Problem Description Lost and AekdyCoin are friends. They always play "number game"(A bor…
题目大意 一次旅游,经过所有城市至少一次,并且任何一座城市访问的次数不能超过两次,求最小费用 每个城市最多访问两次,用状态0,1,2标识访问次数 把城市1~N的状态按照次序连接在一起,就组成了一个三进制数,所有N个城市的状态都能对应到一个三进制数,对一个状态而言,已经访问的城市不关心它的访问的顺序是怎样的,只要知道到达了这个状态,最后访问是哪一个城市就可以进行转移了, 于是定义状态dp[i][j]标识N个城市处于i的状态,最后一个城市是j所需要的最小费用, 状态转移方程可以是 dp[i+3^i]…
<题目链接> 题目大意: 给出n个点和m条边,求经过所有点所需的最小花费,每个点最多经过两次. 解题分析: TSP问题类型,由于此题每个点有三种状态,所以采用三进制状态压缩,0.1.2 分别代表经过这个点的次数,然后就与TSP的dp解法类似,dp[i][j]代表状态为i,以 j 城市作为旅途的最后一个点所需的最小花费 . #include <iostream> #include <stdio.h> #include <stdlib.h> #include&l…
问题描述 : After coding so many days,Mr Acmer wants to have a good rest.So travelling is the best choice!He has decided to visit n cities(he insists on seeing all the cities!And he does not mind which city being his start station because superman can bri…
Electric Bike 题目连接: https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=4920 Description Two years ago, Putri bought an electric bike (e-bike). She likes e-bike a lot since it can assist her i…
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4529 郑厂长系列故事--N骑士问题 Time Limit: 6000/3000 MS (Java/Others)Memory Limit: 65535/32768 K (Java/Others) 问题描述 郑厂长不是正厂长 也不是副厂长 他根本就不是厂长 还是那个腾讯公司的码农 一个业余时间喜欢下棋的码农 最近,郑厂长对八皇后问题很感兴趣,拿着国际象棋研究了好几天,终于研究透了.兴奋之余,坐在棋盘…
也写了好几天的区间DP了,这里稍微总结一下(感觉还是不怎么会啊!). 但是多多少少也有了点感悟: 一.在有了一点思路之后,一定要先确定好dp数组的含义,不要模糊不清地就去写状态转移方程. 二.还么想好...想到了再加上去.... 之前也看了别人的总结,也给出了不少区间DP的模板.这里我也贴一下基本的模板: 区间DP模板 ; len < n; len++) { //操作区间的长度 ; i+len <= n; i++) { //始末 int j=i+len; //检查是否匹配(非必须) for (…
题目链接: acm.hdu.edu.cn/showproblem.php?pid=1158 Employment Planning Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 6020    Accepted Submission(s): 2609 Problem Description A project manager wants…
不要62 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 26083    Accepted Submission(s): 9085 数位dp大法好! . Problem Description 杭州人称那些傻乎乎粘嗒嗒的人为62(音:laoer). 杭州交通管理局常常会扩充一些的士车牌照,新近出来一个好消息,以后上牌照,不再含有不吉利…