我好菜啊
題目大意 : 給定每次可以翻的長度,有m種,問最後把這些硬幣翻到指定狀態的最少次數
show code
#include #include #include const int n = 1e4 + 5;
int read(int x = 0, int f = 1, char c = getchar())
int n, k, m, a[105], p[25], tot, d[n], c[25][25], q[n], l, r, f[1<<20|5];
bool b[n];
int main()
for (int i = 1; i <= m; ++i)
a[i] = read();
for (int i = 1; i <= n; ++i)
if (b[i]) p[++tot] = i;
for (int i = 1; i <= tot; ++i)
}for (int j = 1; j <= tot; ++j)
c[i][j] = d[p[j]];
}int s = (1 << tot) - 1;
memset(f, 0x3f, s * 4);
for (; s >= 1; --s)
}printf("%d\n", f[0] > 1e9 ? -1 : f[0]);
return 0;
}
題目大意 :
show code
題目大意 : 求乙個排列的乙個lis 和 lds,滿足找出的兩個子串行沒有交集
show code
#include #include #include const int n = 5e5 + 5, m = 1e9 + 7;
int read(int x = 0, int f = 1, char c = getchar())
int n, a[n], lis, lds, len1[n], len2[n], stk[n], tp, g[n];
int num1[n], num2[n], sum, s[n];
bool v[n];
struct node1
}t1[n];
void add1(int x, int w, int num)
}node1 ask1(int x)
return ans;
}struct node2
}t2[n], f[n];
void operator += (node2 &a, const node2 &b)
}void add2(int x, int k, node2 w)
node2 ask2(int x)
void add3(int x, int w, int k)
node1 ask3(int x)
int main()
memset(t1 + 1, 0, sizeof(node1) * n);
for (int i = 1; i <= n; ++i)
memset(t1 + 1, 0, sizeof(node1) * n);
for (int i = n; i >= 1; --i)
for (int i = 1; i <= n; ++i)
for (int i = 1; i <= n; ++i)
printf("%d\n", lis);
while (tp) printf("%d ", stk[tp--]);
memset(t1 + 1, 0, sizeof(node1) * n);
for (i = n; i >= 1; --i) }}
}puts("-1");
return 0;
}
省選測試21
設 f i 為上一次參加的比賽是第 i 場的最大愉悅值 則 f i max f i f j frac a i j 對於隨機的資料,把列舉的範圍卡到 3000 即可 容易發現,如果沒有 a j leq a i 的限制,那麼就是乙個裸的斜率優化 dp 把 f i frac frac 看做 y 把 i 看...
省選測試9
這個名次已經是倒數了 感覺整場考試不是很在狀態,正解想不到,暴力分也沒有打滿 其實前兩道題仔細推一下還是能想出來的 t1 2 sat 有一段時間沒有打了 優化建圖的方式和之前的某道題挺像的,但是當時那道題沒改 這次算是補了乙個鍋 t2 的資料範圍折半列舉也不難想,實現時注意一下細節就行了 t3 有一...
省選測試28
題目大意 給乙個排列,翻轉k次,問最終逆序對個數的期望值 然後在用兩個字首和分別優化這3種轉移就好了 show code include define mod x using namespace std const int n 505,m 1e9 7 int n,k,a n f n n s1 n n...