上一页 1 ··· 7 8 9 10 11 12 13 14 15 ··· 22 下一页
摘要: 思路:裸的划分树#include#include#include#include#include#define Maxn 100010#define lson(x) x>1; }}tree[Maxn*4];void BuildTree(int l,int r,int dep,int po){ tree[po].l=l,tree[po].r=r; if(l==r) return ; int mid=tree[po].mid(); int lpos=l,rpos=mid+1; int same=mid-l+1,i; for(i=l;isort... 阅读全文
posted @ 2013-08-12 11:24 fangguo 阅读(139) 评论(0) 推荐(0) 编辑
摘要: 思路:这题是裸的树形dp。dp[i][j]表示第i个节点花费j步并且从子节点返回,能得到的最大苹果数;nback[i[j]表示第i个节点花费j步并且进入某个子节点不返回,能得到的最大苹果数。那么我们就能得到动态方程:根节点为u,子节点为vdp[u][j]=max(dp[u][j],dp[u][j-k-2]+dp[v][k]);nback[u][j]=Max(nback[u][j],nback[u][j-k-2]+dp[v][k],dp[u][j-k-1]+nback[v][k]);//表示对某个节点可以选择进入返回或不返回.#include#include#include#include#in 阅读全文
posted @ 2013-08-12 10:41 fangguo 阅读(162) 评论(0) 推荐(0) 编辑
摘要: 思路:表示我很弱,这个想不出dp方程,参考网上代码#include#include#include#include#include#include#define inf 1 head[Maxn];void init(){ memset(dp,0,sizeof(dp)); memset(vi,0,sizeof(vi)); for(int i=0;i=inf) printf("-1\n"); else printf("%d\n",dp[1][0]); } return 0;} 阅读全文
posted @ 2013-08-11 16:28 fangguo 阅读(153) 评论(0) 推荐(0) 编辑
摘要: 思路:本来写了一个比较短的代码,并且各函数间的重用性比较高,就是结果悲剧的超时了...就是保证每个区间只有一种操作,那么更新时就要更新子节点的子节点,需要递归更新,结果是可想而知。其实这种做法是可以过得,只要将复杂度转移到求和上去(测试数据对求和操作应该要求不严)。但那样就不能直接保存p的三种情况值,因为这样会使得常数级非常大,超时。所以就要找到多重操作并存的方法。对于置为c,这个容易解决。关键是加和乘。思路见代码注释#include#include#include#include#include#define lson(x) x>1; }}tree[Maxn*4];int ans;vo 阅读全文
posted @ 2013-08-11 12:51 fangguo 阅读(300) 评论(0) 推荐(0) 编辑
摘要: #include#include#include#include#include#define Maxn 100010using namespace std;struct Monk{ int id,g; int operator q;multiset :: iterator it,it1;int main(){ int n,i,j,g,k,x; Monk temp; while(scanf("%d",&n),n) { q.clear(); temp.id=1,temp.g=1000000000; q.insert(... 阅读全文
posted @ 2013-08-10 18:09 fangguo 阅读(198) 评论(0) 推荐(0) 编辑
摘要: 思路:对于最大的人数很容易想到,就直接dp。但对于最大值是否唯一就需要应用辅助数组,isOnly[i][0]表示dp[i][0]是否唯一,同理isOnly[i][1]。那么当(dp[v][0]>dp[v][1]&&isOnly[v][0]==0)或(dp[v][1]>dp[v][0]&&isOnly[v][1]==0)或(dp[v][1]==dp[v][0]),那么isOnly[u][0]=0;如果isOnly[v][0]==0,那么isOnly[u][1]=0;#include#include#include#include#include#inc 阅读全文
posted @ 2013-08-10 09:45 fangguo 阅读(147) 评论(0) 推荐(0) 编辑
摘要: 思路:先dfs一下,找出1,n间的路径长度和价值,回溯时将该路径长度和价值清零。那么对剩下的图就可以直接树形dp求解了。#include#include#include#include#define inf 100000000#define Maxn 110using namespace std;int vi[Maxn],head[Maxn],dp[Maxn][510],e,n,T,a[Maxn],len,sum;struct Edge{ int u,v,next,val;}edge[Maxn*2];void init(){ memset(vi,0,sizeof(vi)); ... 阅读全文
posted @ 2013-08-09 21:56 fangguo 阅读(178) 评论(0) 推荐(0) 编辑
摘要: 思路:先求以1为根时,每个节点到子节点的最大长度。然后再次从1进入进行更新。#include#include#include#include#include#define Maxn 20010#define inf 0x7fffffffusing namespace std;int vi[Maxn],si[Maxn],n,road[Maxn],Max[Maxn],lMax[Maxn],head[Maxn],e;struct Edge{ int u,v,val,next;}edge[Maxn*2];void init(){ memset(vi,0,sizeof(vi)); me... 阅读全文
posted @ 2013-08-09 16:45 fangguo 阅读(156) 评论(0) 推荐(0) 编辑
摘要: 思路:裸的划分树#include#include#include#include#include#define Maxn 100010#define lson(x) x>1)using namespace std;int val[20][Maxn],toLeft[20][Maxn],sorted[Maxn];struct Tree{ int l,r;}tree[Maxn*4];void BuildTree(int l,int r,int dep,int po){ tree[po].l=l,tree[po].r=r; if(l==r) return ; in... 阅读全文
posted @ 2013-08-09 16:03 fangguo 阅读(120) 评论(0) 推荐(0) 编辑
摘要: 思路:裸的划分树#include#include#include#include#include#include#define Maxn 100010#define inf 0x7fffffff#define lson(x) (x>1)using namespace std;struct Tree{ int l,r;}tree[Maxn*4];int sorted[Maxn];int val[20][Maxn],toLeft[20][Maxn];void BuildTree(int l,int r,int dep,int po){ tree[po].l=l,tree[po].r=r... 阅读全文
posted @ 2013-08-09 15:52 fangguo 阅读(179) 评论(0) 推荐(0) 编辑
上一页 1 ··· 7 8 9 10 11 12 13 14 15 ··· 22 下一页