- 博客(17)
- 收藏
- 关注
原创 音乐播放器问题记录
记录几个碰到的感觉网上没有找到很好解决办法的问题。一、通过ContentProvider数据集获取歌曲数据获取数据时,我们需要在manifestmanifestmanifest文件中添加权限,如果按照第十章ppt上的方法使用ActivityResultLauncherActivityResultLauncherActivityResultLauncher来获取歌曲,初始化你的ListListList时,顺序会和写的顺序不一样。举个例子@Overrideprotected void onCreate
2022-04-30 01:07:24 483
原创 P2704 [NOI2001] 炮兵阵地 状压DP
P2704 [NOI2001] 炮兵阵地HINTHINTHINT对于 100% 的数据,N≤100N≤100N≤100,M≤10M≤10M≤10,保证字符仅包含 ppp 与 hhh。M的数据范围很小,考虑状压DP。首先,影响第iii行的有i−1i-1i−1行和i−2i-2i−2行,所以我们的dpdpdp数组要体现出来这两个数据的,同时体现出来自己现在在哪行。所以我们可以开个三维的dpdpdp数组:dp[pre][now][i]dp[pre][now][i]dp[pre][now][i],其中的i
2021-07-28 16:24:09 131
原创 P2051 [AHOI2009]中国象棋
题目链接题目大意:给定n*m大小表格,让你摆放棋子,摆放的要求是同一行、同一列中的棋子数不超过两个,问一共可能有多少摆法。(不看别人的题解真不会开dp数组,太弱小了)dp数组开三位,表示已经处理好了前i行时,有j列有一个棋子,有k列有两个棋子。dp数组开完之后思路就很明了。我们每次最多可以新摆放两个棋子(如果多了同一行的就会超出限制)先考虑摆放零个的情况:直接就和上一层的一样了。摆一个的情况:我们只能摆在有零个或者一个棋子的那一列。摆两个的情况:还是可以摆在有零个或者一个棋子的那一列
2021-07-27 16:29:41 222 1
原创 PAT乙级1014福尔摩斯的约会
讲解都在代码注释里#include<string>#include<cstring>#include<iostream>using namespace std;const int maxn = 65;char a[maxn], b[maxn];int main(){ string week[8] = { "","MON","TUE","WED","THU","FRI","SAT","SUN" }; //小技巧,提前把所有的要输出的星期存入一
2021-07-26 00:24:43 79
原创 扩展欧几里得回溯过程中y值的变化
gcd(A,0)=Agcd(A,0)=Agcd(A,0)=A则有A∗x+0∗y=AA*x+0*y=AA∗x+0∗y=A所以在递归终点 x为1,y可取任意数$ gcd(a,b)=gcd(b,a;mod;b)$a∗x1+b∗y1=b∗x0+(a−[ab]∗b)∗y0a*x_1+b*y_1=b*x_0+(a-[\frac{a}{b}]*b)*y_0a∗x1+b∗y1=b∗x0+(a−[ba]∗b)∗y0整理得a∗(x1−y0)+b∗(y1+[ab]∗y0−x0)=0a*(x_1-y_0)
2021-07-20 22:14:57 114
原创 Crane POJ - 2991
Crane题目大意:有n根木棍,第i跟长度为aia_iai,最开始他们由下而上拼接在一起,有m次操作,每次操作中给出整数SiS_iSi和AiA_iAi,要求更改第SiS_iSi与第Si+1S_i+1Si+1根之间至AiA_iAi°,每次操作后输出最后一个木棍端点的坐标(设第一根木棍的端点为原点)。这题中夹角的定义为从i逆时针到i+1根木棍走的度数。记录每个区间的向量。最开始想的是如果第i个和第i+1根之间旋转了了,那么第i根后面的也都旋转了,我就修改了每个最小的区间,然后往回更新,如果
2021-07-14 21:06:03 158
原创 Array Stabilization (GCD version) ST表/线段树+二分
Array Stabilization (GCD version)题目大意:每次用gcd(ai,ai+1)gcd(a_i,a_{i+1})gcd(ai,ai+1)替换aia_iai(其中n+1视为1),问几次能让数组全部相等。由规则来看k=0时,ai=aia_i=a_iai=aik=1时,ai=gcd(ai,ai+1)a_i=gcd(a_i,a_{i+1})ai=gcd(ai,ai+1)k=2时,ai=gcd(gcd(ai,ai+1),gcd(ai+1,ai+2))=gcd(ai
2021-07-14 11:17:05 107
原创 Brackets sequence UVA - 1626
Brackets sequence定义如下正规括号序列:①空序列是正规括号序列②如果S是正规括号序列,那么(S)和[S]也是正规括号序列③如果A和B都是正规括号序列,那么AB也是正规括号序列。输入一个长度不超过100的,由"("、")"、"["、"]"构成的序列,添加尽量少的括号,得到一个规则序列。如有多解,任意输出一个序列即可。dp[i][j]表示从i到j需要加多少括号,边界为i==j时,要加一个。由题目定义②③可知,有两种转移情况:1、两边是()或[],那么可由dp[i+1][j-1]转
2021-07-12 21:04:55 239
原创 Partitioning by Palindromes UVA - 11584
Partitioning by Palindromes求一串字符的的最小回文串划分的个数简单题,先预处理有哪些回文串,技巧是枚举中心,然后想左右延申,要注意的是回文串的长度有奇数和偶数之分#include<iostream>#include<algorithm>#include<cstring>#define ll long long#define ull unsigned long long#define mem(a,b) memset(a,b,size
2021-07-10 11:06:44 73
原创 Lighting System Design UVA - 11400
Lighting System Design 你的任务是设计一个照明系统。一共有n种灯泡可供选择,不同种类的灯泡必须用不同的电源,但一种灯泡可以共用一个电源。每种灯泡用4给数值表示:电压V,电源费用K,灯泡单价C和所需灯泡的数目L。假设通过所有的灯泡的电流都相同,因此电压高的灯泡功率也大。为了省钱,可以把一些灯泡换成电压更高的另一种灯泡以节省电源的钱(但不能换成电压更低的灯泡)。求最优方案的费用。题目很难懂。举个例子的话假如有三种灯泡(已经按电压升序排列)编号电压电源费用单价数量
2021-07-10 10:59:11 133
原创 Jin Ge Jin Qu hao UVA - 12563
Jin Ge Jin Qu hao UVA - 12563给定n首歌和他们的持续时长(每首不超过180s),求在t时间内(不包含t)能唱的最多歌数,并求此数量下能唱的最长时间,求出来后歌数加1,时长加678。题目给定t的范围为≤1E9,n≤50,但由于每首不超过180s,所以t最大为180*50。经典的01背包,要注意的点:1、优先选取曲目最多,在此条件下求时间最长。2、当最大歌数为0的时候,最大时间为0,不能和正常情况一样更新,否则会使最大时间变成t-1。测试数据12 23 4#inc
2021-07-09 19:43:18 128
原创 Unidirectional TSP UVA - 116
Unidirectional TSP UVA - 116给一个m行n列的证书矩阵,从第一列任何一个位置每次往右,又上或右下走一格,最终到达最后一列。要求经过的整数之和最小。整个矩阵是环形的,即第一行的上一行是最后一行,最后一行的下一行是第一行。输出路径上每列的行号。多解时,输出字典序最小的。若不需要输出路径或任意输出一个路径,这就是水题一个。但是要求输出字典序最小的解。开始做是顺着遍历,每次记录pre是多少,dp数组表示第走到(i,j)时已经走的路程,但是这个过程中是有后效性的,所以无法确定最开始记
2021-07-09 18:40:56 93
原创 Tour UVA - 1347
Tour UVA - 1347紫书P269给定平面上n个点的坐(按x递增的顺序给出,x各不相同,且均为正整数),设计一条路线,从最左边的点出发,走到最右边的点后再返回,路径中经过的点横坐标严格递增或递减(紫书第一个图不对),要求除了最左点和最右点外每个点恰好经过一次,且路径总长度(欧几里得距离)最短。一个人向右走在向左走,抽象为两个人都从最左点出发,前往最右点,计算两个人路径和妙啊 。dp[i][j]为一个人在第i个点,另一个在第j个点,且前max(i,j)个点都走过时,还要走的路径...
2021-07-09 14:56:32 117
原创 The Tower of Babylon 巴比伦塔 UVA - 437
The Tower of Babylon紫书P269有n种立方体,每种都有无穷多个。要求选一些立方体落成一根尽量高的柱子(可以自行选择哪一条边作为高),是的每个立方体的底面长款分别严格小于它下方立方体的底面长宽。立方体可以旋转,所以一种立方体可以看成三个固定摆法的立方体,即为3*n种立方体中求最长路。#include<iostream>#include<algorithm>#include<cstring>#define mem(a,b) memset(a,
2021-07-09 10:29:29 89
原创 A Spy in the Metro UVA - 1025
A Spy in the MetroUVA - 1025 紫书p267某城市的地铁是线性的,有n个车站,从左到右编号为1~n。有M1辆列车从第一站开始往右开,还有M2辆列车从第n站开始往左开。在时刻0,Mario从第一站出发,目的是在时刻T会哦见车站n的一个间谍。在车站等车时容易被抓住,所以他决定尽量躲在开动的火车上,让在车站等待的总时间尽量短。列车靠站时间忽略不计,且Mairo身手敏捷,即使两辆方向不同的列车在同一时间靠站,Mairo也能完成换乘。求最少等待时间,无解输出Impossible。在读
2021-07-08 21:03:19 115
原创 P1036 [NOIP2002 普及组] 选数(二进制枚举裸题)
题目大意:给定n个数,从中选择k个数,若这k个数和为素数,则ans++求ans为多少题目链接重要部分(二进制枚举):for (int i = 0; i <= (1 << n); i++){ for (int j = 0; j < n; j++) { if ((i >> j) & 1) { //则二进制这一位为1,代表选择了对应一位的数 } }}假设n为4,则从0000遍历到1111即for(i=0;i<10000(
2021-07-07 20:16:44 274 1
原创 Making the Grade (POJ - 3666) 离散化+DP
Making the Grade题目大意:给你一个数组,求将其修改为单增或单减(非严格)所需要的最少代价,修改一次的代价为|初值-末值|。以单增为例:所有更改后的数字必定在原数组中出现过。dp[i][j]表示前i个数都满足要求,且第i个数字取j时所要的代价之和,但由于a[i]取值范围到了1E9,故要进行离散化——第i个数字取第j小的数字(sort)dp[i][j]=abs(a[i]−b[j])+min(dp[i−1][p])且p取1到jdp[i][j]=abs(a[i]-b[j])+min(dp[
2021-07-07 10:06:19 217
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人