摘要:
链接这题可以算树形DP吧 树上的递推对于树上的某个节点 反着算比较好做 就是算有多少有simple路径的固定某个节点u 另两个节点 有两种取法1.从不同子树里各选一个2.从所有子树里选一个 再从以u为跟的子树 外面选一个求总和 1 #pragma comment(linker, "/STACK:16777216") 2 #include 3 #include 4 #include 5 #include 6 #include 7 using namespace std; 8 #define N 100010 9 #define LL __int6410 struct node 阅读全文
摘要:
链接归属简单树形DP 挺简单的 跟第一道一样 就是我跑偏了题意。。以为要覆盖点 纠结啊 推了N久 推不出啊 然后就郁闷了 打了局游戏 边想边打 实在想不出 看下题解 跑偏了分两种情况D方程见代码 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 #define N 2010 8 int f[N]; 9 struct node10 {11 int f,ch,m1,m0,br;12 void init()13 {14 f = m0 =ch = br... 阅读全文
摘要:
链接类似最大矩阵 sum存下 枚举最大就是 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 int sum[110][110],o[110][110]; 8 int main() 9 {10 int i,j,n,w,h,a,b;11 while(scanf("%d",&n)&&n)12 {13 scanf("%d%d",&h,&w);14 memset(o,0,sizeof(o));15 memset(s 阅读全文
摘要:
链接真的1A了。。一开始想复杂了 想着补全再删 没想好 后来想到递归 大的回文串是由小的推过来的一直递归下去 对于当前的i,j可以选择保留或者删除 选个最小的 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 #define N 2010 8 #define INF 0xfffffff 9 int v[500][2];10 int dp[N][N];11 char s[N];12 int dfs(int i,int j)13 {14 if(i>j) return 0;15 ... 阅读全文
摘要:
链接这叫树形DP吗。。?断开某条边 求剩下两颗树数权值和的差最小dfs一遍 枚举边 查了n久 wa n次 dp数组没初始化。。在poj上1A感觉应该挺爽 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 #define N 100010 8 #define M 1000010 9 #define LL long long10 LL dp[Mdp[i])69 o = s-dp[i]-dp[i];70 else71 ... 阅读全文
摘要:
简单DP 说是简单 还是推了好一会 推出来觉得好简单保留当前i的最小值 dp[i] = min(dp[i],dp[j]+i-j-1) j 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 #define INF 0xfffffff 8 char s[5010]; 9 int w[500][500],dp[5010];10 int main()11 {12 int i,j,k,n;13 char a,b;14 while(cin>>s)15 {16 memset... 阅读全文