C++信息竞赛进级第7讲 区间.pptxVIP

  • 0
  • 0
  • 约 15页
  • 2024-05-30 发布于广西
  • 举报
C++信息竞赛进级第7讲区间.pptxC++信息竞赛进级第7讲区间.pptx

学科竞赛编程教研研究院C++NOIPNOIIOI

题目描述帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的n×m的矩阵,矩阵中的每个元素均为非负整数。游戏规则如下:每次取数时须从每行各取走一个元素,共n个。经过m次后取完矩阵内所有元素;每次取走的各个元素只能是该元素所在行的行首或行尾;每次取数都有一个得分值,为每行取数的得分之和,每行取数的得分=被取走的元素值,其中i表示第i次取数(从1开始编号);游戏结束总得分为m次取数得分之和。帅帅想请你帮忙写一个程序,对于任意矩阵,可以求出取数后的最大得分。矩阵取数游戏

输入输出格式输入格式:输入文件包括n+1行:第1行为两个用空格隔开的整数n和m。第2~n+1行为n×m矩阵,其中每行有m个用单个空格隔开的非负整数。输出格式:输出文件仅包含1行,为一个整数,即输入矩阵取数后的最大得分。

输入输出样例

1PARTONEblldp(intL,intR)//记忆化搜索{if(f[L][R]!=-1)returnf[L][R];if(R-L=1)f[L][R]=max(num[L]*p[k]+dp(L+1,R),dp(L,R-1)+num[R]*p[k]);elsef[L][R]=num[L]*p[k];returnf[L][R];}voidprint(bllx){if(!x)return;if(x)print(x/10);putchar(x%10+0);}intmain(){in(n);in(m);p[0]=1;for(inti=1;i=m;i++)p[i]=p[i-1]*2;for(inti=1;i=n;i++){for(intj=1;j=m;j++)in(num[j]);memset(f,-1,sizeof(f));ans+=dp(1,m);}if(!ans)printf(0);elseprint(ans);return0;}#includebits/stdc++.h#definein(x)x=read()#defineMAXN81#definekm-(R-L)#definebll__int128usingnamespacestd;inlineintread(){intX=0,w=1;charch=getchar();while(ch0||ch9){if(ch==-)w=-1;ch=getchar();}while(ch=0ch=9)X=(X3)+(X1)+ch-0,ch=getchar();returnX*w;}intn,m;intnum[MAXN];bllans,p[MAXN],f[MAXN][MAXN];

题目描述树网的和

输入格式:共n行。第1行,两个正整数n和s,中间用一个空格隔开。其中n为树网结点的个数,s为树网的核的长度的上界。设结点编号以此为1,2,…,n。从第2行到第n行,每行给出3个用空格隔开的正整数,依次表示每一条边的两个端点编号和长度。例如,“247”表示连接结点2与4的边的长度为7。输出格式:一个非负整数,为指定意义下的最小偏心距。输入输出格式

输入输出样例

PARTONEstructPoint{//点intdist=0,head=0;intfa=0,fa_dist=0;//以直径一个端点为根,父节点编号及到其距离intcur_dist=0;//后面用来降低时间复杂度boolvis=false;}pt[305];structPath{//边intend=0,weight=0;intnext=0;Path(int__end=0,int__cost=0,int__next=0):end(__end),weight(__cost),next(__next){}}ph[605];voidset_path(intu,intv,intw){ph[++ptr]=Path(v,w,pt[u].head),pt[u].head=ptr;ph[++ptr]=Path(u,w,pt[v].head),pt[v].head=ptr;}voiddfs1(intp){//p表示正在访问哪个点if(pt[p].

文档评论(0)

1亿VIP精品文档

相关文档