模板
快读inline int read()
{
int x = 0;
int flag = 1;
char c = getchar();
while(!isdigit(c))
{
if(c == '-')
flag = -1;
c = getchar();
}
while(isdigit(c))
{
x = x * 10 + (c - '0');
c = getchar();
}
return x * flag;
}//快读template<typename T> void read(T&x)
{
char c;int sign = 1;x = 0;
// 判断是否是负数,以及去掉前面多余的字符
do { c = getchar(); if(c == '-') sign = -1; }while(!isdigit(c));
do { x = x * 10 + c - '0'; c = getchar(); }while(isdigit(c));
x *= sign;
}快出
inline void put(long long d)
{
if(d < 0)
putchar('-'),d = -d;
if(d > 9) put(d / 10);
putchar((d % 10) + '0');
}dp
LIS 和 LCS
最长上升子序列(LIS)
#includeusing namespace std;const int N = 1e5 + 50;long long s,top;long long a,ans,n,ma = -1;int main(){ cin >> n; for(int i = 1;i > a; for(int i = 1;ia; s[++ top] = a; for(int i = 2;i = a) s)] = a; else s[++ top] = a; } cout n; for(int i=1;i>a; c]=i; } for(int i=1;i>b; } dp=c]; int k=1; for(int i=2;idp) { k++; dp=c]; } else { dp])-dp]=c]; } } couts; for(int i=1;i>w>>v; } for(int i=1;i=w;j--) { dp=max(dp,dp]+v); } } coutn>>s; for(int i=1;i>w>>v; for(int j=w;j>c; for(int i=1;i>wi>>vi>>shu; k = 1; while(shu>=k) { q ++; v = vi*k; w = wi*k; shu -= k; k *= 2; } if(shu>0) { q++; v = vi*shu; w = wi*shu; } } for(int i=1;i=w;j--) dp=max(dp,dp]+v); cout n >> c; for(int i = 1;i > wi >> vi >> si; if(si > 0) { int t=1; while(t>vk>>wk; for(int i = 1;i >v >>w >>s; for(int j = vk;j >= v;j --) for(int k = wk;k >= w;k --) dp=max(dp,dp + s); } cout v second -> w int m = read(),n = read(); for(int i = 1;i = q.second) dp = max(dp,dp.w] + a.v - q.first); else dp = max(dp,dp.w] + a.v); } else { dp = max(dp,dp.w] + a.v); o.push_back(make_pair(a.group,make_pair(a.v,a.w))); } } } cout >n>>m>>s; for(int i=1;i>x>>y>>c; add(x,y,c); } dij(); for(int i=1;i>y>>c; add(x,y,c); } dij(s); for(int i=1;i m >> s; int x,y,k; for(int i = 1;i > x >> y >> k; add(x,y,k); } for(int i = 1;i m; for(int i=1;i>x>>y>>w; dp=min(dp,w);//可能存在重边 dp=min(dp,w); } for(int i=1;i
页:
[1]