题目
[jzoj 2679] 跨时代 {暴力状压+背包}
[luogu 2579] [ZJOI2005]沼泽鳄鱼 {矩阵乘法}
[jzoj 1214] [luogu 4130] [NOI2007]项链工厂 {线段树}
(40+10+0)=50分。
来纪中训练的第二天,受到
x
x
y
和
w
y
c
xxy和wyc
xxy和wyc仙气的影响,只能在角落里瑟瑟发抖。
说点正经事。感觉自己不是特别有动力, 题目改着改着就不想改……。 做事的速度还是不够快吧。
比赛程序
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);
}