08 2013 档案
摘要:Problem Description某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接连通的城镇。省政府“畅通工程”的目标是使全省任何两个城镇间都可以实现交通(但不一定有直接的道路相连,只要互相间接通过道路可达即可)。问最少还需要建设多少条道路?Input测试输入包含若干测试用例。每个测试用例的第1行给出两个正整数,分别是城镇数目N ( 2 #include 3 #define maxn 1000+5 4 using namespace std; 5 int bin[maxn]; 6 int findx(int x){ 7 int r=x; 8 while...
阅读全文
摘要:描述:有N种物品和一个容量为V的背包。第i种物品最多有n[i]件可用,每件费用是c[i],价值是w[i]。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。变式:有的物品能只有1个,有的物品有多个。状态转移方程:dp[i][j]=max{dp[i][j],dp[i-1][j-c[i]*k]+w[i]*k}//0s){ total++; w[total]=w[i]*s; c[total]=c[i]*s n[i]=n[i]-s; s=s*2; } w[i]=n[i]*i;}空间优化后的0...
阅读全文
摘要:一、01背包问题简述:n种物品,每种一个,选或不选随你,背包一定有容量,求不超过容量的情况下,价值最大。递归方程:dp[i][v]=max{dp[i][v],dp[i-1][v-c[i]]+w[i]}我们要注意的是下一次背包放I个物品的状态的可达性必然要满足上一次放I-1个物品时的可达性,觉得数学归纳法可以证明出来。所以这里有个隐含的判断,就是初始时memset(dp,0,sizeof(dp));在这里已经将dp清零,所以我们可以认为在dp==0是,这一节点是没有被访问到的。因为我们取得是大的值,自然0的情况怎么都不会被选中。递推表示:memset(dp,0,sizeof(dp));for(i
阅读全文