本文共 5196 字,大约阅读时间需要 17 分钟。
又被辉神吊打了。今天不仅被辉神李巨吊打,还给基本上给全班垫底了。
看到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 11 #include 12 #define Formylove return 013 #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 template void 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 ANS30 int main() {31 #ifdef ANS32 freopen("restaurant.in","r",stdin);33 freopen("restaurant.out","w",stdout);34 #endif35 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 11 #include 12 #define Formylove return 013 #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 template void 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 ANS68 int main() {69 #ifdef ANS70 freopen("olefin.in","r",stdin);71 freopen("olefin.out","w",stdout);72 #endif73 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 11 #include 12 #define Formylove return 013 #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 template void 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 ANS60 int main() {61 #ifdef ANS62 freopen("tromino.in","r",stdin);63 freopen("tromino.out","w",stdout);64 #endif65 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