2023.6.18拷逝
T1
如图,从
设
考虑
#include<iostream>
#include<cstdio>
using namespace std;
const long long mod=100000007;
long long t,n,m,ans;
long long f(long long x,long long y){
long long s=x;x=1;
while(y){
if(y&1)
x=x*s%mod;
s=s*s%mod;y>>=1;
}
return x;
}
int main(){
freopen("gta.in","r",stdin);
freopen("gta.out","w",stdout);
scanf("%lld",&t);
while(t--){
scanf("%lld%lld",&n,&m);
if((m-n)&1)
printf("0\n");
else if(m==n)
printf("1\n");
else{
printf("%lld\n",f(2,(m-n)/2-1));
}
}
fclose(stdin);fclose(stdout);
return 0;
}
T2
首先介绍一种错误的方法。
设
状态转移方程:
但是这个方程有问题。假设当前的
肿么办呢?我们可以仍然遍历上面的每一个状态,但是将
#include<iostream>
#include<cstdio>
using namespace std;
const long long MAXN=2147483647;
long long n,a[10005],b[10005],c[10005],ans,ans1,ans2,vis[10005];
void dfs1(int x,int sum,long long val){
if(sum==n*2){
ans1=max(ans1,val);
return void();
}
if(val<=ans)
return ;
if(vis[x]){
dfs1(x+1,sum,val);return ;
}
for(int i=1;i<=n*2;++i)
if(!vis[i]&&i!=x){
vis[i]=1;vis[x]=1;
dfs1(x+1,sum+2,val&(b[i]^b[x]));
vis[i]=0;vis[x]=0;
}
return ;
}
void dfs2(int x,int sum,long long val){
if(sum==n*2){
ans2=max(ans2,val);
return ;
}
if(vis[x]){
dfs2(x+1,sum,val);return ;
}
for(int i=1;i<=n*2;++i)
if(!vis[i]&&i!=x){
vis[i]=1;vis[x]=1;
dfs2(x+1,sum+2,val&(c[i]^c[x]));
vis[i]=0;vis[x]=0;
}
return ;
}
int main(){
//freopen("vip.in","r",stdin);
//freopen("vip.out","w",stdout);
scanf("%lld",&n);
for(int i=1;i<=n*4;++i)
scanf("%lld",&a[i]);
ans=-1e18;
for(int i=0;i<(1<<(n*4));++i){
int tmp=i,cnt=0,x=0,y=0;ans1=0,ans2=0;
while(tmp){
if(tmp&1)
++cnt;
tmp>>=1;
}
if(cnt!=n*2)
continue;
for(int j=1;j<=n*4;++j){
if((i>>(j-1))&1) b[++x]=a[j];
else c[++y]=a[j];
}
dfs1(1,0,MAXN);
if(ans1<=ans)
continue;
dfs2(1,0,MAXN);
ans=max(ans,ans1-ans2);
}
printf("%lld\n",ans);
fclose(stdin);fclose(stdout);
return 0;
}
T3(84pts)
正解需要用到
统计每一个点的度,如果一个点的度为
#include<iostream>
#include<cstdio>
using namespace std;
const int maxn=1e6+5;
int tot,n,m,x,y,ans,cnt,head[maxn],ver[maxn],nxt[maxn],in[maxn];
bool vis[maxn],r[maxn];
int read(){
char p;int s=0,w=1;
while(1){
p=getchar();
if(p=='-'||(p>='0'&&p<='9'))
break;
}
while(1){
if(p=='-')
w*=-1;
else if(p>='0'&&p<='9')
s=s*10+p-'0';
else break;
p=getchar();
}
return s*w;
}
int main(){
freopen("ring.in","r",stdin);
freopen("ring.out","w",stdout);
scanf("%d%d",&n,&m);
for(int i=1;i<=m;++i){
x=read();y=read();
++in[x];++in[y];
}
for(int i=1;i<=n;++i)
if(in[i]==1)
++ans;
if(ans&1)
ans=ans/2+1;
else
ans=ans/2;
printf("%d\n",ans);
fclose(stdin);fclose(stdout);
return 0;
}
T4
树形背包好题。
设
状态转移方程:
①:
②:
③:
如果
④:
如果
#include<iostream>
#include<cstdio>
using namespace std;
const int mod=1e9+7,l=1e5+5;
int n,k,a,b,tot,head[l<<1],ver[l<<1],nxt[l<<1];
int dp[l][105][2][2],tmp[l][2][2],siz[l];
void add(int x,int y){
nxt[++tot]=head[x];head[x]=tot;ver[tot]=y;
}
void dfs(int x,int fa){
siz[x]=dp[x][0][0][0]=dp[x][1][1][0]=1;
for(int t=head[x];t;t=nxt[t]){
int v=ver[t];
if(v!=fa){
dfs(v,x);
for(int i=0;i<=min(k,siz[x]);++i){
tmp[i][0][0]=dp[x][i][0][0];dp[x][i][0][0]=0;
tmp[i][0][1]=dp[x][i][0][1];dp[x][i][0][1]=0;
tmp[i][1][0]=dp[x][i][1][0];dp[x][i][1][0]=0;
tmp[i][1][1]=dp[x][i][1][1];dp[x][i][1][1]=0;
}
for(int i=0;i<=min(k,siz[x]);++i)
for(int j=0;j<=min(k-i,siz[v]);++j){
dp[x][i+j][0][0]=(dp[x][i+j][0][0]+1ll*tmp[i][0][0]*dp[v][j][0][1]%mod)%mod;
dp[x][i+j][0][1]=(dp[x][i+j][0][1]+1ll*tmp[i][0][1]*(dp[v][j][0][1]+dp[v][j][1][1])%mod)%mod;
dp[x][i+j][0][1]=(dp[x][i+j][0][1]+1ll*tmp[i][0][0]*dp[v][j][1][1]%mod)%mod;
dp[x][i+j][1][0]=(dp[x][i+j][1][0]+1ll*tmp[i][1][0]*(dp[v][j][0][0]+dp[v][j][0][1])%mod)%mod;
dp[x][i+j][1][1]=(dp[x][i+j][1][1]+1ll*tmp[i][1][0]*(dp[v][j][1][1]+dp[v][j][1][0])%mod)%mod;
dp[x][i+j][1][1]=(dp[x][i+j][1][1]+1ll*tmp[i][1][1]*(1ll*(dp[v][j][0][0]+dp[v][j][0][1])+1ll*(dp[v][j][1][0]+dp[v][j][1][1]))%mod)%mod;
}
siz[x]+=siz[v];
}
}
return ;
}
int main(){
scanf("%d%d",&n,&k);
for(int i=1;i<n;++i)
scanf("%d%d",&a,&b),add(a,b),add(b,a);
dfs(1,0);
printf("%d\n",(dp[1][k][1][1]+dp[1][k][0][1])%mod);
fclose(stdin);fclose(stdout);
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探