#include<bits/stdc++.h>using namespace std;int a[107];int b[10007][107];int c[107][107];int main(){ int n; scanf("%d",&n); for(int i=1;i<=n;i++){ scanf("%d",&a[i]); } b[0][0]=1; for(int i=1;i<=n;i++){//遍历1到n for(int…
#include<bits/stdc++.h>using namespace std;int a[200007];int b[200007][7];int ans[200007];int main(){    for(int i=1;i<=5;i++)        b[1][i]=1;//第一个可以从1选到5    int n;    scanf("%d",&n);    for(int i=1;i<=n;i++)        scanf("…
https://codeforces.com/contest/1117/problem/C 题意 在一个二维坐标轴上给你一个起点一个终点(x,y<=1e9),然后给你一串字符串代表每一秒的风向,然后每一秒你也可以选择一个方向移动,问到达从起点到终点的最短时间 题解 思维:等效法 假如到达终点之后,可以静止不动,可以用自己走反向风方向来抵消风的方向 先只考虑风向,用前缀和将每一秒到达的位置维护出来,假设x秒到达的位置是[x,y],终点为[sx,sy],则若|sx-x|+|sy-y|<=x,则一定…
https://codeforces.com/contest/1132/problem/F 思维 + 区间dp 题意 给一个长度为n的字符串(<=500),每次选择消去字符,连续相同的字符可以同时消去,问最少需要消去多少次 题解 定义dp[l][r]为区间[l,r]剩下一个字符所需要的最小次数 dp[l][r]=min(dp[l][i]+dp[i+1][r]+x) x为消去剩下两个字符所需要的次数,假如两个字符相同需要x=-1 代码 #include<bits/stdc++.h> #de…
A. Kitchen Utensils Water. #include <bits/stdc++.h> using namespace std; #define N 110 int n, k, cnt[N]; int main() { while (scanf("%d%d", &n, &k) != EOF) { memset(cnt, , sizeof cnt); , x; i <= n; ++i) { scanf("%d", &a…
开场被A劝退,写了得有50min于是不敢交了.unrated了喜闻乐见. A:瞎猜都能猜到如果要走到那条直线上,进入直线的点横坐标或纵坐标与起点相同,离开直线的点横坐标或纵坐标与终点相同,证明脑补一下比较显然(事实上也就是以起点终点为对角点构成的矩形与该直线的交点).看错题以为到直线上的那个点必须是整点,于是搞了半天exgcd.然而就算这样也不至于写这么长时间啊根本不知道自己在干啥. #include<iostream> #include<cstdio> #include<c…
C. Playing Piano 题目链接:https://codeforces.com/contest/1079/problem/C 题意: 给出数列{an},现在要求你给出一个数列{bn},满足: 1.当an+1>an时,有bn+1>bn:2.当an+1=an时,有bn+1!=bn:3.当an+1<an时,有bn+1<bn. 且满足1<=bn<=5. 题解: 我们可以考虑动态规划,设dp(i,j)为第i位置时,b(i)=j是否可行. 那么状态转移时可以分ai>…
题意:把一长串字符串 排成矩形形式  使得行最小  同时每行不能相差大于等于两个字符 每行也不能大于20个字符 思路: 因为使得行最小 直接行从小到大枚举即可   每行不能相差大于等于两个字符相当于  从上往下一列一列填 然后直接模拟即可 #include<bits/stdc++.h> #define FOR(i,f_start,f_end) for(int i=f_start;i<=f_end;i++) #define MS(arr,arr_value) memset(arr,arr_…
题意:给出一个数列 a1 a2......an  让你构造一个序列(该序列取值(1-5)) 如果a(i+1)>a(i) b(i+1)>b(i) 如果a(i+1)<a(i)  那么b(i+1)<b(i) 如果a(i+1)==a(i) 那么b(i+1)!=b(i) 请构造该序列 如果不存在 那么输出-1 思路: 当时想的时候是贪心 但是贪心的话对于相等的时候就很不好处理 然而该题的状态比较好定义 dp[i][x] 表示 第i个位置 取x 是否成立 那么状态总量有  n(<=5e5…
题意:给出一条直线 ax +by+c=0  给出两个整点 (x1,y1) (x2,y2) 只有在x,y坐标至少有一个整点的时 以及   给出的直线才有路径(也就是格子坐标图的线上) 问 两个整点所需要经过的最短距离 思路: 整点和整点之间的最短路径 要么 经过 直线 要么不经过直线 如果不经过直线,那么最短距离就是两者的曼哈顿距离  |x1-x2|+|y1-y2| 如果经过线段  那么一个点有两种到线段的方式  一种是和线段上的点x 相同 一个是和线段上的点y相同  2*2一共四种情况  全部算…