2019.07.06【NOIP提高组】模拟 A 组总结

题目

[jzoj 2679] 跨时代 {暴力状压+背包}

[luogu 2579] [ZJOI2005]沼泽鳄鱼 {矩阵乘法}

[jzoj 1214] [luogu 4130] [NOI2007]项链工厂 {线段树}


(40+10+0)=50分。
来纪中训练的第二天,受到 x x y 和 w y c xxy和wyc xxywyc仙气的影响,只能在角落里瑟瑟发抖。

说点正经事。感觉自己不是特别有动力, 题目改着改着就不想改……。 做事的速度还是不够快吧。


比赛程序

T1 dfs

#include<cstdio>
#include<algorithm>
#define rep(i,x,y) for (register int i=x;i<=y;i++)
using namespace std;
int n,a[25],ans=-1; bool v[25]; 
void dfs(int x,int q,int w,int e,int r){
	if (x>n) {
		if (q!=0&&w!=0&&q==e&&w==r&&q*w>ans) ans=q*w; 
		return; 
	}
	dfs(x+1,q+a[x],w,e,r); 
	dfs(x+1,q,w+a[x],e,r); 
	dfs(x+1,q,w,e+a[x],r); 
	dfs(x+1,q,w,e,r+a[x]); 
	dfs(x+1,q,w,e,r); 
}
int main(){
	scanf("%d",&n);
	rep(i,1,n) scanf("%d",&a[i]); 
	dfs(1,0,0,0,0); 
	if (ans==-1) printf("No Solution"); else printf("%d",ans); 
}

T2 dfs

#include<cstdio>
#include<algorithm>
#define rep(i,x,y) for(int i=x;i<=y;++i)
using namespace std; 
const int expectation=10000; 
int n,m,start,end,k,c[55],b[55][1001],list[55],cnt,t,ans; 
struct node{
	int y,next; 
}a[20001];
/*void mul(){
	
}
void mull(){
	
}*/
void dfs(int x,int y){
	if (x==end&&y==k){
		ans=(ans+1)%expectation; return; 
	} 
	if (y>k) return; 
	rep(i,0,n-1){
	 bool v=1; 
	 rep(j,1,t)
	  if (i==b[j][(y-1)%c[j]+1]) {
	  	v=0; break;
	  }
	 if (v)	dfs(i,y+1); 
	}
}
int main(){
	scanf("%d%d%d%d%d",&n,&m,&start,&end,&k); 
	int x,y; 
	rep(i,1,m) {
		scanf("%d%d",&x,&y);
		a[++cnt]=(node){y,list[x]}; list[x]=cnt; 
		a[++cnt]=(node){x,list[y]}; list[y]=cnt; 
	}
	scanf("%d",&t); 
	rep(i,1,t){
		scanf("%d",&c[i]); 
		rep(j,1,c[i]) scanf("%d",&b[i][j]); 
	}
	dfs(start,1); 
	return 0&printf("%d",ans); 
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值