随笔分类 -  ZOJ

摘要:白书二代上提到了无源无汇有容量下界网络可行流和有容量下界网络的s-t最大/最小流问题。但是由于本人智商捉鸡,觉得LRJ大神写的似乎不是很好理解,所以只能找一些题目来帮助自己理解理解了。这里直说方法,证明。。。不会。1.无源无汇有容量下界可行流这个问题的解法在周源的那个论文里讲的很清楚了。对于每条边,都有一个容量下界b和一个容量上界c,那么这条边实际的可行流量只有c-b,剩下的b必须满流。对每个点i,求a = sum(流向它的下界流)-sum(从它流出的下界流量)若a>0,从源点0连一条到i的容量为a的边若a 2 #include 3 #include 4 #include 5 #... 阅读全文
posted @ 2013-08-06 20:15 浙西贫农 阅读(441) 评论(0) 推荐(1)
摘要:刷水题,贴代码。比较裸的树形DP。。dp(i,j)表示以i节点为根节点用j天时间能够获得的最大价值。由于要往返,m除以2就可以了。View Code 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #define maxn 101 5 using namespace std; 6 int n,m,start,e; 7 int dp[maxn][maxn],next[maxn << 1],v[maxn << 1],cost[maxn << 1] 阅读全文
posted @ 2012-12-11 15:11 浙西贫农 阅读(159) 评论(0) 推荐(0)
摘要:DP写的,其过程比较艰难,贴一下代码:View Code 1 #include <stdio.h> 2 #include <string.h> 3 void add(char s1[],char s2[],char s3[]) 4 { 5 int len1 = strlen(s1); 6 int len2 = strlen(s2); 7 int a[10000]; 8 int k = len1 > len2 ? len1 : len2; 9 int i,j; 10 for(i = 0;i <= k;i++) 11 ... 阅读全文
posted @ 2012-04-29 21:32 浙西贫农 阅读(192) 评论(0) 推荐(0)
摘要:矩阵链乘,状态转移方程:dp(i,j)=min{dp(i,k)+dp(k+1,j)+a[i]*b[j]*b[k]}。这个题目主要就是要记录路径。做了那个ZOJ1463之后,这个应该不成问题。下面贴代码:View Code 1 #include <iostream> 2 using namespace std; 3 int dp[11][11],c[11][11],a[11],b[11],num; 4 void printans(int i,int j) 5 { 6 if(i == j) 7 { 8 cout<<"A"<<i; 9 }10 阅读全文
posted @ 2012-04-20 21:01 浙西贫农 阅读(210) 评论(0) 推荐(0)
摘要:这个题目,筷子应该最好是非降序排列的(只要输入的时候处理一下即可),这样处理起来就比较方便,因为这样就可以保证在后来的计算中,每取两个筷子都有比他们两根长的筷子,就可以符合题意了。下面贴代码:View Code 1 #include <iostream> 2 using namespace std; 3 int dp[5050][1010]; 4 #define maxn 1<<30 5 int a[5050]; 6 int main() 7 { 8 9 int ncase,guests,chopsticks,i,j;10 cin>>ncase;11 whi 阅读全文
posted @ 2012-04-19 15:45 浙西贫农 阅读(690) 评论(0) 推荐(0)
摘要:题目本身,没什么好说的了。记得第一天练DP的时候就是叫我做的这个题,这个哪里做得出来啊。现在怎么说也比原来好点了。这个题实际上是跟POJ 1141是一样的,几乎一模一样。但是这个ZOJ太奇葩了,这个题目的输入让我无语了。后来我看了一下提交的结果。。提交了两千多次,没有PE,只有WA。。。这个就无语了,题目要求的那些空行让人凌乱啊。下面贴代码:View Code 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 using namespace std; 5 const int MA 阅读全文
posted @ 2012-04-18 17:42 浙西贫农 阅读(213) 评论(0) 推荐(0)
摘要:这个题目拿到一看,马上就感觉又是带权的最长公共子序列的DP问题,觉得应该问题不大。真正动手一写,发现面对序列中不匹配的时候,处理起来好像很麻烦,一时没想到什么好办法。最后还是用的滚动数组绕开了原来的问题。下面贴代码:View Code 1 #include <iostream> 2 #include <iomanip> 3 using namespace std; 4 int a[101]; 5 double dp[101]; 6 int main() 7 { 8 int m,n,num,i,j; 9 double price;10 while(cin>>m 阅读全文
posted @ 2012-04-13 14:45 浙西贫农 阅读(191) 评论(0) 推荐(0)
摘要:还是水题。状态转移方程:dp(i,j)=min{dp(i,k)+dp(k,j)+a[i]a[j]a[k]}(i<k<j)。处理时注意边界即可。贴代码:View Code 1 #include <iostream> 2 #include <cstring> 3 using namespace std; 4 int d[101][101],a[101]; 5 int dp(int i,int j) 6 { 7 int &ans = d[i][j]; 8 int k,temp; 9 if(ans != -1)10 return ans;11 if(i... 阅读全文
posted @ 2012-04-11 18:14 浙西贫农 阅读(169) 评论(0) 推荐(0)
摘要:DP水题。最长公共子序列,稍稍变形即可。模型完全一样。View Code 1 #include <iostream> 2 #include <cstring> 3 using namespace std; 4 #define MAX 2012 5 int dp[MAX][MAX],v[200]; 6 char a[MAX],b[MAX]; 7 int main() 8 { 9 int n,i,j;10 while(cin>>n)11 {12 char ch;13 int value;14 memset(v,0,sizeo... 阅读全文
posted @ 2012-04-11 15:41 浙西贫农 阅读(124) 评论(0) 推荐(0)
摘要:这个题目是上个礼拜天上午看的,纠结了一上午啊,总算还是有点思路,但是总是感觉到相当的混乱,感觉被伤到了一样。后来想想不必就为这么一个题目纠结,换一个吧。但是不纠结是不可能的。最终,还是没忍住,看了一下人家的解题报告,发现思路大致上还是对的,但是,细节方面处理的很烂,琢磨了半天,几乎都要把人家的代码背下来了。今天早上一起来,就决心把这个伤到我的题目弄掉,但是,因为一个小小的BUG,弄了好一下,我算是明白了,写点代码还是老实点的好啊,免得因为一个BUG要调试半天。。现在说正题。题目的意思是,老板需要雇人干活,雇佣一个人需要钱h,每个月需要支付他工资s,解雇他还要给他"买断”,需要支付f的 阅读全文
posted @ 2012-04-10 20:25 浙西贫农 阅读(230) 评论(0) 推荐(0)
摘要:简单的DP,跟那个白书上面的嵌套矩形的模型完全一样。记忆化搜索。本人写的时候还是小心翼翼的,因为练的不是很多。题目就是搬砖啊,搬砖。。。生来就是搬砖的命啊。View Code 1 #include <iostream> 2 #include <algorithm> 3 using namespace std; 4 class Block 5 { 6 public: 7 int l; 8 int w; 9 int h; 10 }; 11 int edg[40][3];//记录每一块砖头的规格 12 int g[100][100];//邻接矩阵 13 i... 阅读全文
posted @ 2012-04-06 21:14 浙西贫农 阅读(190) 评论(0) 推荐(0)