BZOJ 1571 DP】的更多相关文章

思路: 预处理出在能力值为i的时候 滑雪一次的最小时间 f[i][j]表示i时间 j的能力值 最多的滑雪次数 我先用vector 把课程按起点push进去 1. for(int k=0;k<vec[i].size();k++){ f[i+vec[i][k].l][vec[i][k].a]=max(f[i+vec[i][k].l][vec[i][k].a],f[i][j]); } 上课 2. f[i+1][j]=max(f[i][j],f[i+1][j]); 喝一杯可可汁 3. f[i+land[…
LINK 题意:给出n,k,有a,b两种值,a和b间互相配对,求$a>b$的配对组数-b>a的配对组数恰好等于k的情况有多少种. 思路:粗看会想这是道容斥组合题,但关键在于如何得到每个a[i]大于b的组数. 不妨从整体去考虑,使用$f[n][j]$代表前n个中有j组$a[i]>b[i]$,很容易得到转移式$f[n][j]=f[n-1][j]+f[n-1][j-1]*(cnt[n]-(j-1))$,其中$cnt[i]$为比a[i]小的b[]个数 但是仔细思考该式子含义会发现,$f[n][j…
http://www.lydsy.com/JudgeOnline/problem.php?id=1571 dp[i][j]表示前i个时间,能力为j所能达到得最大滑雪次数 预处理出,需要能力$<=c$的滑坡滑行的最少时间的坡花费的时间 dp转移,三种情况 1 喝coco汁 2 滑雪 3 学习课程 具体看代码 #include<cstdio> #include<cstring> #include<algorithm> ; int t,s,n; inline int r…
参考:https://blog.csdn.net/cgh_andy/article/details/52506738 没有get到什么重点的dp--做的莫名其妙 注意滑雪一个坡可以滑很多次 设f[i][j]为时间为i能力为j的最大滑雪次数,预处理l[i][j]为在i时获得j能力的最晚开始时间,w[i]为有能力j时最短的能滑雪时间 模拟转移即可 #include<iostream> #include<cstdio> #include<cstring> using name…
这道题被马老板毒瘤了一下,TLE到怀疑人生 //然而BZOJ上妥妥地过了(5500ms+ -> 400ms+) 要么SPFA太玄学要么是初始化block被卡到O(n^4) 不管了,不改了 另外DP方程值得学习 #include<bits/stdc++.h> #define rep(i,j,k) for(int i=j;i<=k;i++) using namespace std; const int maxn = 4e4+11; typedef long long ll; const…
题意:求逆序对数量为k的长度为n的排列的个数 SOL: 显然我们可以对最后一位数字进行讨论,判断其已经产生多少逆序对数量,然后对于前n-1位同样考虑---->每一个长度的排列我们都可以看做是相同的,因为它与最后一位的影响我们已经计算过了.那么就变成了一个好多维DP的过程... 不过我的方程感觉有点太直白,应该可以优化因为在BZ上都是卡时过去的...太慢了...大概状态还是有问题.... Code: /*===============================================…
首先对于一棵树我们可以tree_dp来解决这个问题,那么对于环上每个点为根的树我们可以求出这个树的一端为根的最长链,并且在tree_dp的过程中更新答案.那么我们对于环,从某个点断开,破环为链,然后再用DP来解决这个问题. 备注:很久之前的一道题,刚转的c++,然后T了,也懒得改了. /************************************************************** Problem: 1791 User: BLADEVIL Language: C++…
Description Farmer John 想要带着 Bessie 一起在科罗拉多州一起滑雪.很不幸,Bessie滑雪技术并不精湛. Bessie了解到,在滑雪场里,每天会提供S(0<=S<=100)门滑雪课.第i节课始于M_i(1<=M_i<=10000),上的时间为L_i(1<=L_i<=10000).上完第i节课后,Bessie的滑雪能力会变成A_i(1<=A_i<=100). 注意:这个能力是绝对的,不是能力的增长值. Bessie买了一张地图,…
就是dp啊 f[i][j]表示到第i位,最后一位高度是j的最小花费 转移::f[i][j]=minn(f[i-1][k])+abs(a[i]-num[j]);(k<=j) #include<cstdio> #include<iostream> #include<cstring> #include<cmath> #include<algorithm> #include<queue> using namespace std; int…
打一次鼹鼠必然是从曾经的某一次打鼹鼠转移过来的 以打每一个鼹鼠时的最优解为DP方程 #include<iostream> #include<cstdio> #include<cstdlib> #define N 10005 using namespace std; int n,m,ans; int f[N],t[N],x[N],y[N],mx[N]; int main() { scanf("%d%d",&n,&m); for(int…