摘要:
四维dp 1 #include<cstdio> 2 #include<cstring> 3 using namespace std; 4 const int N=41; 5 int f[N][N][N][N],g[356],a,b,c,d,n,m; 6 int max(int x,int y){ 7 阅读全文
摘要:
我们按照左右手数的乘积升序排序,就能使最多金币数最小了 为什么呢? 我们知道: 1)如果相邻的两个人交换位置,只会影响到这两个人的值,不会影响他人 2)假设相邻的两个人i, i + 1。设A[i] B[i] <= A[i + 1] B[i + 1],i之前所有人的左手乘积为S。 ans1 = max 阅读全文
摘要:
反正图两边bfs 1 #include<iostream> 2 #include<cstdio> 3 #include<queue> 4 5 using namespace std; 6 7 inline int readint(){ 8 int x=0,f=1; 9 char ch=getchar 阅读全文
摘要:
显然线段树可以搞…… 不过常数需要优化的很小 另一种做法, 我们可以考虑二分答案 每次对于1--mid天维护前缀和判断即可 1 #include<cstdio> 2 #include<cstring> 3 using namespace std; 4 const int N=1000010; 5 i 阅读全文
摘要:
意思就是费用的最大值最小 那么我们对最大费用进行二分,按此跑最短路,累计扣减血量进行比较即可 1 #include<cstdio> 2 #include<cstring> 3 using namespace std; 4 const int N=10010,M=100010; 5 long long 阅读全文
摘要:
dp 设f[i][j][l]表示A串取i个(但a[i]不一定能取到),B串取j个(b[j]一定能取到),此时用了l个串的方案数。 第一种情况:a[i]==b[j] f[i][j][l]=f[i-1][j-1][l]+f[x][j-1][l-1] 第二种情况:a[i]!=b[j] f[i][j][l] 阅读全文