摘要:
思路:动态规划。设dp[i][j][k]表示用第一个串的前i隔字符和第二个串的前k隔字符组成长度为i的串的个数,那么:若s1[j+1] == s2[k+1] dp[i+1][j+1][k+1] += dp[i][j][k],否则:dp[i+1][j+1][k]+=dp[i][j][k];dp[i+1... 阅读全文
摘要:
水题,dfs#include#include#include#include#includeusing namespace std;const int MAXN = 22;int W, H;char str[MAXN][MAXN], vis[MAXN][MAXN];int dir[4][2] = {... 阅读全文
摘要:
水题,开根号判断大致范围,再找即可。#include#include#includeusing namespace std;int main(){ int t, CASE(0); long long int n; scanf("%d", &t); while(t--){ ... 阅读全文
摘要:
预先处理好phi数组和前缀和,水题。#include#include#include#include#includeusing namespace std;const int MAXN = 5e6+10;unsigned long long int phi[MAXN];void init(){ ... 阅读全文
摘要:
组合数学,ans = C(n,k)*A(n,k).#include#include#include#include#include#define LL long longusing namespace std;LL work(int n, int k){ if(k > n) return 0;... 阅读全文
摘要:
记忆化搜索下即可。#include#include#include#include#includeconst int MAXN = 10010;const int MOD = 10000007;using namespace std;long long int dp[MAXN];int a, b, ... 阅读全文
摘要:
题意,在一个n*n的棋盘上放置一些马,使这些马不能互相攻击,问最多能放多少。思路:从第一行每隔一个放置一个马即可,注意n=1和n=2的情况要特判.#includeint main(){ int n, m, t; scanf("%d", &t); for(int i = 1;i 1... 阅读全文
摘要:
很水的一个dp#include#include#include#includeusing namespace std;const int N=100;int a[2*N+5][N+5],dp[2*N+5][N+5];int main(){ int T,n,i,j,ca=0; cin>>T... 阅读全文
摘要:
有向图拓扑排序,判段是否存在。#include#include#include#include#include#includeusing namespace std;const int MAXN = 20010;struct Edge{ int to, next;};Edge edge[MAX... 阅读全文
摘要:
最短路的变形,使用spfa做。#include#include#include#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace... 阅读全文