蓝桥杯vip试题以及答案解析

蓝桥杯vip试题以及答案解析

ID:17515250

大小:179.70 KB

页数:85页

时间:2018-09-02

蓝桥杯vip试题以及答案解析_第1页
蓝桥杯vip试题以及答案解析_第2页
蓝桥杯vip试题以及答案解析_第3页
蓝桥杯vip试题以及答案解析_第4页
蓝桥杯vip试题以及答案解析_第5页
资源描述:

《蓝桥杯vip试题以及答案解析》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、//首先声明这并不是本人原创,只不不过本人想总结出来方便大家,全为C++代码。1.结点选择问题描述有一棵n个节点的树,树上每个节点都有一个正整数权值。如果一个点被选择了,那么在树上和它相邻的点都不能被选择。求选出的点的权值和最大是多少?解题思路:这题模型是树形动态规划入门题目,dp[i][0]表示该节点不被选择,dp[i][1]表示该结点被选择。转移方程为:dp[u][1]+=dp[v][0];//选择了u结点,则与它邻接的结点不选;dp[u][0]+=max(dp[v][0],dp[v][1]);不选择u结点,则与它

2、邻接的结点选择结果最大的;应该特别注意:该题结点数量较大,应该选用邻接表存储边的关系1.#include  2.#include  3.#define max(a,b) ((a)>(b)?(a):(b))  4.#define maxn 100010  5.bool vis[maxn];  6.int dp[maxn][2];  7.int father[maxn];  8.int head[maxn];  9.int n;  10.int cnt;  11.struct Edge  

3、12.{  13.    int to,next;  14.}edge[2*maxn];  15.void add(int u,int v)  16.{  17.    edge[cnt].to=v;  18.    edge[cnt].next=head[u];  19.    head[u]=cnt++;  20.}  21.void treedp(int u)  22.{  23.    vis[u]=1;  24.    for(int i=head[u];i!=-1;i=edge[i].next)  25. 

4、   {  26.        int v=edge[i].to;  27.        if(!vis[v])  1.        {  2.            treedp(v);  3.            dp[u][1]+=dp[v][0];  4.            dp[u][0]+=max(dp[v][1],dp[v][0]);  5.        }  6.    }  7.}  8.void init()  9.{  10.    cnt=0;  11.    memset(dp,

5、0,sizeof(dp));  12.    memset(father,0,sizeof(father));  13.    memset(vis,0,sizeof(vis));  14.    memset(head,-1,sizeof(head));  15.}  16.int main()  17.{  18.    init();  19.    scanf("%d",&n);  20.    for(int i=1;i<=n;i++)  21.    scanf("%d",&dp[i][1]);  22. 

6、   int root=0;  23.    int begin=1;  24.    for(int i=0;i

7、

8、begin)  32.        {  33.            r

9、oot=a;  34.        }  35.    }  36.      37.    while(father[root])  38.    root=father[root];  39.    treedp(root);  40.    int ans;  41.    ans=max(dp[root][0],dp[root][1]);  42.    printf("%d",ans);  43.}  2.K好数 问题描述如果一个自然数N的K进制表示中任意的相邻的两位都不是相邻的数字,那么我们就说这个数

10、是K好数。求L位K进制数中K好数的数目。例如K=4,L=2的时候,所有K好数为11、13、20、22、30、31、33共7个。由于这个数目很大,请你输出它对1000000007取模后的值。解题思路:dp[i][j]表示第i位为j的时候的个I好数个数;因此有转移方程:dp[i][j]=dp[i-1][m]+dp[i][j];m为上一

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。