摘要: #include#include#include#include#includeusing namespace std;int len[22],n,El;int vi[22];int dfs(int k,int pos,int nowlen){ int i,j; if(nowlen==El) { if(k==n) return 1; else nowlen=0,pos=0; } for(i=pos;iMax) Max=len[i]; sum+... 阅读全文
posted @ 2013-07-08 20:43 fangguo 阅读(137) 评论(0) 推荐(0) 编辑
摘要: 对于网络流有一个定理:最小点权覆盖集=最大网络流;最大点权独立集=总权值-最小点权覆盖集;网络流解法代码如下:#include#include#include#include#define N 1010#define M 50010#define inf 1=n)return flow-lv; if(lv==0) break; } if(d[v]1) addedge(pos(i,j),pos(i-1,j),inf); if(j>1) ... 阅读全文
posted @ 2013-07-08 18:38 fangguo 阅读(257) 评论(0) 推荐(0) 编辑
摘要: 这题有两种解题思路,一个是记忆化搜索,一个是dp。分别贴代码:记忆化搜索:#include#include#include#include#includechar str[1000],a[300],b[300];int sum,flag;int hash[205][205];void dfs(int i,int j,int k){ if(flag) return ; if(k==sum) { flag=1; return ; } if(hash[i][j]) return ; hash[i][j]=1;... 阅读全文
posted @ 2013-07-08 14:59 fangguo 阅读(321) 评论(0) 推荐(0) 编辑
摘要: 从原串的最大长度开始枚举,当某个长度的值能保存所有串时,即成功。对每个长度进行深搜,每次取某个串的第一个。#include#include#include#include#includeusing namespace std;char str[8][6];int flag=0,len[10],n;int getlen(int *a){ int i,ans=0; for(i=0;inowlen)//剩下的串中最短的串比预计长度要长 return ; if(nowlen==0)//找到,进行标记 { flag=1; return ;... 阅读全文
posted @ 2013-07-08 11:10 fangguo 阅读(146) 评论(0) 推荐(0) 编辑