摘要:
简单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... 阅读全文
摘要:
链接归属树形DP 做着更像记忆化DP很好做 就是那个输出路径恶心了。。改代码 从60多行改到120多行。。dp从1维加到三维。。先类似记忆化搜索整棵树 枚举以i为根节点的最大值 子树类似求完最大值 再递归搜一下前序 这题不记忆化会超时 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 #define LL long long 8 LL dp[35][35][35],a[35]; 9 int n,path[35],to; 10 LL dfs(int root,int ... 阅读全文
摘要:
链接通化邀请赛的题 貌似不怎么难记忆化DP 状态方程类似于2维的 只是变成了4维 每次有四种方向去搜 取最棒的判断好边界条件 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 int p1[25],p2[25],sum1[25],sum2[25]; 8 int dp[25][25][25][25]; 9 int dfs(int i1,int j1,int i2,int j2)10 {11 if(dp[i1][j1][i2][j2]!=-1)12 return dp[i... 阅读全文
摘要:
链接刚接触 树上背包。。有点抽象化 找好父亲和儿子的关系 及状态转移方程代码里有详细的注释 就不解释了 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 #define N 155 8 #define INF 0xfffffff 9 int n,m;10 int w[N][N],o[N],dp[N][N];11 void add(int u,int v)12 {13 w[u][o[u]++] = v;//不在乎内存的邻接表14 }15 void dfs(int root)16... 阅读全文
摘要:
最近脑子有点乱 老是不想清楚就啪啪的敲 敲完之后一看 咦。。样例都过不去 仔细一想 这样不对啊刚开始就写了一SPFA 最后发现边跟点的关系没处理好 删了。。写dfs。。还是没转化好 开始搜解题方法 看到别人都说最小环 解最小环的方法跟我想的差不多 就是边转化点没处理好又想了想 开个二维数组标记下 转化点 然后就枚举每条边的两个点间的最短距离 要先删了这条边 找个最小的就好了dijk求最短路 1 /* 2 ID: shangca2 3 LANG: C++ 4 TASK: fence6 5 */ 6 #include 7 #include 8 #include 9 #i... 阅读全文
摘要:
我是被这题彻底折腾惨了 。。DP很简单 不用说了 重点是必须按它那个图说来来划分三角形 而不是随便撇下一部分 随便划下一个三角形就可以所以 要判断J是第奇数个点才可以 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 int dp1[210][210],sum[210],dp2[210][210]; 8 char s[210][210]; 9 int main()10 {11 int i,j,n;12 cin>>n;13 for(i = 1; i >s[i];... 阅读全文
摘要:
昨天晚上写的一题 结果USACO一直挂中 今天交了下有一点点的数论知识 背包很好想 就是不好确定上界官方题解:这是一个背包问题。一般使用动态规划求解。一种具体的实现是:用一个线性表储存所有的节点是否可以相加得到的状态,然后每次可以通过一个可以相加得到的节点,通过加上一个输入的数求出新的可以相加得到的点。复杂度是O(N×结果)。但是可以证明结果不会超过最大的两个数的最小公倍数(如果有的话)。参见数论。所以复杂度也是O(Na2),完全可以接受了。判断无限解可以按上面的方法,另外也可以算所有的数的最大公约数。如果不是1,也就是说这些数不互质,那么不被这个最大公约数整除的数一定构造不出来。当 阅读全文
摘要:
简单的01背包 保存下方案总数 其实就是dp[v]值 输出路径dfs一下 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 int dp[100010],w[110],path[110],o,f[110],n; 8 void dfs(int sw,int v) 9 {10 int j;11 if(sw==0)12 {13 o = v;14 return ;15 }16 for(j = 1; j >tw;29 ... 阅读全文
摘要:
链接第一道树形DP根据左儿子 右兄弟 将多叉树转化成二叉树 结构体里保存取这个节点和不取这个节点的最大值 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 #define N 6010 8 struct node 9 {10 int child,father,brother;11 int nmax,ymax,v;12 void init()13 {14 nmax = ymax=0;15 child=father=brot... 阅读全文
摘要:
USACO挂了一小时。。我坚持不懈的等。。终于打开了 把3章最后一题交了 可以安心的睡去了之前题意没看清楚 不知道要有序 写了一状压 结果TLE了 再优化也TLE 后来想写状态转移时发现 它必须有序放。。这下就简单多了枚举所有最后状态 找个最大值就OK 了。。汗。。我刚交上 又打不开了 还好交得快 1 /* 2 ID: shangca2 3 LANG: C++ 4 TASK: rockers 5 */ 6 #include 7 #include 8 #include 9 #include10 #include11 using namespace std;12 int... 阅读全文