分析:典型dp,状态转移方程dp[i][j]=dp[i-1][j-1]+dp[i][j-i];dp[i][j]表示i辆卡车装j台电脑的方法数。例如:8台电脑3台车卡车1卡车2卡车3dp[3,8]=dp[2,7]+dp[3,5]第一类611卡车3只放一台电脑,运法总数相当于2台卡车运7台电脑dp[2,7]。521431第二类422每台车有一台以上电脑,运法总数相当于3台车运5台电脑dp[3,5]332c++View Code #include<stdio.h>#include<string.h>__int64 dp[210][210];void init(){ int i Read More
推荐java学习室http://www.java3z.com/cwbwebhome/旧题新做,练java用View Code import java.io.*;import java.util.*;import java.math.*;public class Main{ static int n,m,match[]=new int[210]; static boolean mat[][]=new boolean [210][210],v[]=new boolean[210]; static boolean dfs(int pre) { int i; ... Read More
http://www.cnblogs.com/zjh10/articles/2032294.html这个题目是说 每个点有权值,有些点的得到需要先得到某点,问你选M个点能够得到的最大值很明显是有依赖的背包,而且应该是有依赖中有依赖(虽然我觉得题目并没有很明确地说)~这样的话 我们就构建dp[i][j],i为i号点,j为它选了里面的几个点。。。。。这样的话 我们就发现其实是个树,点的值取决于子点的选法。方程dp[k][j]=max(dp[k][j],dp[k][j-kk]+dp[t[k][i]][kk])表示在第i个k的子点中选kk个点加上目前k号点选j-kk个点与直接在k号点选j个点谁更优。。 Read More
转自http://www.cppblog.com/baby-fly/archive/2010/08/03/122027.aspx?opt=admin很显然是动态规划。dp[i]表示前i个数有多少个有效的子序列。那么 dp[i]=dp[i-1]+A。 A是前面i-1个数中,与i的差值不超过d的以该数结尾的有效的子序列的个数 的和。我们可以用另外一个数组sub[i]表示以i结尾的有效的子序列的个数。 dp与sub的不同之处是dp中的子序列不一定是以第i个数结尾的。sub[i]= sigma sub[k] ,( abs(numk],num[i])<=d )。 由于求sub的时间复杂度为O(n^ Read More
View Code #include<stdio.h>#include<string.h>#include<algorithm>using namespace std;const int MAX = 800000;int a[800000];bool is(int x){ int i=0,a[11]; memset(a,0,sizeof(a)); while(x>0) { int tmp=x%10; a[tmp]++; if(a[tmp]>=2) return false; x/=10; }... Read More
我决定:以后每一场codeforces我都将进行总结,尽量在赛后把题目AK(*_*),水平有限,只能说尽量。难得有一场CF的比赛在白天开始,于是我准时的守候在电脑前准备打一场CF,哈哈a题b题很快过了,c题卡了一下,原因是在poj做过类似的一道题,http://www.cnblogs.com/wuyiqi/archive/2011/09/20/2182986.html但是这道题目只需要求有几个区间能被其他区间完全覆盖,并不需要求每个区间分别能被几个区间覆盖,这是本质差别对于这道题,只需要排个序(没必要用树状数组)x递增,y递减所以后面的x肯定大于等于前面的x,现在只需要比较y即可,如果y小于m Read More