又被辉神吊打了。今天不仅被辉神李巨吊打,还给基本上给全班垫底了。
看到T3就知道是十进制快速幂,全机房考试的当时应该就我会,结果我tm没找到递推。
Orz lyc BM直接水过,Orz wys六个for循环出递推,Orz辉神手推n^2递推。
不敢说话,我去背BM板子了。
这样下去大概NOIp继续被辉神李巨吊打,可以退役回去学常规了。
1 餐馆 (restaurant)
完全背包裸题。
1 //Achen 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #include<set> 11 #include 12 #define Formylove return 0 13 #define For(i,a,b) for(int i=(a);i<=(b);i++) 14 #define Rep(i,a,b) for(int i=(a);i>=(b);i--) 15 const int N=5007; 16 typedef long long LL; 17 typedef double db; 18 using namespace std; 19 int T,n,m,S,t[N],w[N]; 20 LL f[N],ans; 21 22 templatevoid read(T &x) { 23 char ch=getchar(); x=0; T f=1; 24 while(ch!='-'&&(ch<'0'||ch>'9')) ch=getchar(); 25 if(ch=='-') f=-1,ch=getchar(); 26 for(;ch>='0'&&ch<='9';ch=getchar()) x=x*10+ch-'0'; x*=f; 27 } 28 29 #define ANS 30 int main() { 31 #ifdef ANS 32 freopen("restaurant.in","r",stdin); 33 freopen("restaurant.out","w",stdout); 34 #endif 35 read(T); 36 while(T--) { 37 memset(f,0,sizeof(f)); 38 read(n); read(m); read(S); 39 For(i,1,n) { 40 read(t[i]); read(w[i]); 41 } 42 For(i,1,m) { read(t[n+i]); read(w[n+i]); } 43 For(i,1,m) For(j,1,n) { 44 int x; read(x); 45 if(x>0) t[n+i]+=x*t[j]; 46 } 47 For(i,1,n+m) For(j,t[i],S) 48 f[j]=max(f[j],f[j-t[i]]+w[i]); 49 ans=0; 50 For(j,0,S) ans=max(ans,f[j]); 51 printf("%lld\n",ans); 52 } 53 Formylove; 54 }
2 烯烃 (olefin)
树形dp裸题,最最基础的换根操作。
1 //Achen 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #include<set> 11 #include 12 #define Formylove return 0 13 #define For(i,a,b) for(int i=(a);i<=(b);i++) 14 #define Rep(i,a,b) for(int i=(a);i>=(b);i--) 15 const int N=1e5+7; 16 typedef long long LL; 17 typedef double db; 18 using namespace std; 19 int id,T,n,m,tag[N],ans[N]; 20 21 templatevoid read(T &x) { 22 char ch=getchar(); x=0; T f=1; 23 while(ch!='-'&&(ch<'0'||ch>'9')) ch=getchar(); 24 if(ch=='-') f=-1,ch=getchar(); 25 for(;ch>='0'&&ch<='9';ch=getchar()) x=x*10+ch-'0'; x*=f; 26 } 27 28 int ecnt,fir[N],nxt[N<<1],to[N<<1],fa[N]; 29 void add(int u,int v) { 30 nxt[++ecnt]=fir[u]; fir[u]=ecnt; to[ecnt]=v; 31 } 32 33 int f[N]; 34 void dfs(int x) { 35 f[x]=0; 36 for(int i=fir[x];i;i=nxt[i]) { 37 dfs(to[i]); 38 f[x]=max(f[x],f[to[i]]+1); 39 } 40 } 41 42 void get_max(int &a,int b) { if(b>a) a=b; } 43 44 void dfs2(int x,int ff) { 45 int se=0,fi=x==1?0:ff+1; 46 for(int i=fir[x];i;i=nxt[i]) { 47 se=max(se,f[to[i]]+1); 48 if(se>fi) swap(fi,se); 49 } 50 for(int i=fir[x];i;i=nxt[i]) if(tag[to[i]]) { 51 if(fi==f[to[i]]+1) get_max(ans[tag[to[i]]],se+f[to[i]]+1); 52 else get_max(ans[tag[to[i]]],fi+f[to[i]]+1); 53 } 54 for(int i=fir[x];i;i=nxt[i]) { 55 if(f[to[i]]+1==fi) dfs2(to[i],se); 56 else dfs2(to[i],fi); 57 } 58 } 59 60 void init() { 61 ecnt=0; 62 memset(ans,0,sizeof(ans)); 63 memset(fir,0,sizeof(fir)); 64 memset(tag,0,sizeof(tag)); 65 } 66 67 #define ANS 68 int main() { 69 #ifdef ANS 70 freopen("olefin.in","r",stdin); 71 freopen("olefin.out","w",stdout); 72 #endif 73 read(id); 74 read(T); 75 while(T--) { 76 init(); 77 read(n); read(m); 78 For(i,2,n) { 79 read(fa[i]); 80 add(fa[i],i); 81 } 82 For(i,1,m) { 83 int x; 84 read(x); 85 tag[x]=i; 86 } 87 dfs(1); 88 dfs2(1,0); 89 For(i,1,m-1) printf("%d ",ans[i]); 90 if(m) printf("%d\n",ans[m]); 91 } 92 Formylove; 93 }
3 三米诺 (tromino)
十进制快速幂,我不会找递推,只能用背BM板子然后水过去。
1 //Achen 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #include<set> 11 #include 12 #define Formylove return 0 13 #define For(i,a,b) for(int i=(a);i<=(b);i++) 14 #define Rep(i,a,b) for(int i=(a);i>=(b);i--) 15 const int N=40007,p=998244353; 16 typedef long long LL; 17 typedef double db; 18 using namespace std; 19 char s[N]; 20 LL n,f[15]={0,1,3,10,23,62,170,441,1173,3127,8266}; 21 22 templatevoid read(T &x) { 23 char ch=getchar(); x=0; T f=1; 24 while(ch!='-'&&(ch<'0'||ch>'9')) ch=getchar(); 25 if(ch=='-') f=-1,ch=getchar(); 26 for(;ch>='0'&&ch<='9';ch=getchar()) x=x*10+ch-'0'; x*=f; 27 } 28 29 struct jz { 30 LL a[6][6]; 31 friend jz operator *(const jz&A,const jz&B) { 32 jz rs; 33 For(i,0,5) For(j,0,5) { 34 rs.a[i][j]=0; 35 For(k,0,5) 36 (rs.a[i][j]+=A.a[i][k]*B.a[k][j]%p)%=p; 37 } 38 return rs; 39 } 40 }bs,rs; 41 42 void ksm() { 43 int len=strlen(s); 44 int ok=0; 45 Rep(i,len-1,0) { 46 int c; 47 c=s[i]-'0'; 48 if(!ok) { 49 c--; 50 if(c<0) c+=10; 51 else ok=1; 52 } 53 For(i,1,c) rs=rs*bs; 54 jz pr=bs; 55 For(i,1,9) bs=bs*pr; 56 } 57 } 58 59 #define ANS 60 int main() { 61 #ifdef ANS 62 freopen("tromino.in","r",stdin); 63 freopen("tromino.out","w",stdout); 64 #endif 65 scanf("%s",s); 66 For(i,0,5) For(j,0,5) rs.a[i][j]=bs.a[i][j]=0; 67 For(i,0,5) { 68 rs.a[i][i]=1; 69 if(i<5) bs.a[i+1][i]=1; 70 } 71 bs.a[5][5]=1; 72 bs.a[4][5]=2; 73 bs.a[3][5]=6; 74 bs.a[2][5]=1; 75 bs.a[0][5]=p-1; 76 ksm(); 77 LL ans=0; 78 For(i,0,5) 79 (ans+=rs.a[i][0]*f[i+1]%p)%=p; 80 printf("%lld\n",ans); 81 Formylove; 82 }
转载于:https://www.cnblogs.com/Achenchen/p/9607815.html