摘要: 我是被这题彻底折腾惨了 。。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];... 阅读全文
posted @ 2013-08-23 23:28 _雨 阅读(219) 评论(0) 推荐(0) 编辑
摘要: 昨天晚上写的一题 结果USACO一直挂中 今天交了下有一点点的数论知识 背包很好想 就是不好确定上界官方题解:这是一个背包问题。一般使用动态规划求解。一种具体的实现是:用一个线性表储存所有的节点是否可以相加得到的状态,然后每次可以通过一个可以相加得到的节点,通过加上一个输入的数求出新的可以相加得到的点。复杂度是O(N×结果)。但是可以证明结果不会超过最大的两个数的最小公倍数(如果有的话)。参见数论。所以复杂度也是O(Na2),完全可以接受了。判断无限解可以按上面的方法,另外也可以算所有的数的最大公约数。如果不是1,也就是说这些数不互质,那么不被这个最大公约数整除的数一定构造不出来。当 阅读全文
posted @ 2013-08-23 22:30 _雨 阅读(520) 评论(0) 推荐(0) 编辑
摘要: 简单的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 ... 阅读全文
posted @ 2013-08-23 15:59 _雨 阅读(271) 评论(0) 推荐(0) 编辑
摘要: 链接第一道树形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... 阅读全文
posted @ 2013-08-23 13:19 _雨 阅读(244) 评论(0) 推荐(0) 编辑