2016 UESTC Training for Dynamic Programming(1)
2016-09-19 21:44
330 查看
A 柱爷与咸鱼神功
裸的背包,蛤蛤蛤
B 柱爷与最大区间和
正着搞一遍,反着搞一遍就A了
C 柱爷的下凡
无敌打表,蛤蛤蛤,我去他的400ms
D 柱爷的恋爱
只要每个时候的前括号数都大于后括号数就满足了,方法:dfs
E 柱爷与远古法阵
高斯消元get,在每周算法讲堂上有这道题的详解.
裸的背包,蛤蛤蛤
#include <cstdio> #include <cmath> #include <iostream> #include <cstring> #include <algorithm> using namespace std; int f[5005][5005],n,m,t[5005],v[5005],lala; int main() { scanf("%d%d",&n,&m); for (int i=1;i<=m;i++) { scanf("%d%d",&t[i],&v[i]); } for (int i=1;i<=m;i++) for (int j=1;j<=n;j++) { if (j>=t[i]) f[i][j]=max(f[i-1][j],f[i-1][j-t[i]]+v[i]); else f[i][j]=f[i-1][j]; } printf("%d",f[m] ); }
B 柱爷与最大区间和
正着搞一遍,反着搞一遍就A了
#include <cstdio> #include <cmath> #include <iostream> #include <cstring> #include <algorithm> using namespace std; int a[500005],w[500005],f[500005],n,alala; int main() { scanf("%d",&n); for (int i=1;i<=n;i++) { scanf("%d",&a[i]); } for (int i=1;i<=n;i++) { f[i]=a[i]; if (f[i-1]>=0) f[i]+=f[i-1]; } for (int i=n;i>=1;i--) { w[i]=a[i]; if (w[i+1]>=0) w[i]+=w[i+1]; } for (int i=2;i<=n;i++) { f[i]=max(f[i-1],f[i]); } for (int i=n-1;i>=1;i--) { w[i]=max(w[i+1],w[i]); } int ans=-200000000; for (int i=2;i<n;i++) { ans=max(ans,f[i-1]+w[i+1]); } printf("%d",ans); }
C 柱爷的下凡
无敌打表,蛤蛤蛤,我去他的400ms
#include <cstdio> #include <cmath> #include <iostream> #include <cstring> #include <algorithm> using namespace std; int ans1[205],ans2[205],lalalalal,fa; void chushihua() { ans1[1]=2,ans2[1]=3; ans1[2]=2,ans2[2]=3; ans1[3]=2,ans2[3]=3; ans1[4]=2,ans2[4]=3; ans1[5]=2,ans2[5]=3; ans1[6]=2,ans2[6]=3; ans1[7]=2,ans2[7]=5; ans1[8]=3,ans2[8]=4; ans1[9]=3,ans2[9]=4; ans1[10]=2,ans2[10]=5; ans1[11]=2,ans2[11]=5; ans1[12]=4,ans2[12]=6; ans1[13]=4,ans2[13]=6; ans1[14]=4,ans2[14]=6; ans1[15]=3,ans2[15]=7; ans1[16]=4,ans2[16]=6; ans1[17]=3,ans2[17]=7; ans1[18]=4,ans2[18]=6; ans1[19]=3,ans2[19]=8; ans1[20]=3,ans2[20]=8; ans1[21]=5,ans2[21]=7; ans1[22]=4,ans2[22]=9; ans1[23]=4,ans2[23]=9; ans1[24]=5,ans2[24]=8; ans1[25]=5,ans2[25]=8; ans1[26]=5,ans2[26]=8; ans1[27]=5,ans2[27]=8; ans1[28]=4,ans2[28]=9; ans1[29]=5,ans2[29]=8; ans1[30]=5,ans2[30]=8; ans1[31]=4,ans2[31]=9; ans1[32]=5,ans2[32]=8; ans1[33]=5,ans2[33]=8; ans1[34]=7,ans2[34]=11; ans1[35]=7,ans2[35]=11; ans1[36]=7,ans2[36]=11; ans1[37]=5,ans2[37]=12; ans1[38]=5,ans2[38]=12; ans1[39]=5,ans2[39]=12; ans1[40]=7,ans2[40]=11; ans1[41]=5,ans2[41]=12; ans1[42]=5,ans2[42]=12; ans1[43]=5,ans2[43]=12; ans1[44]=7,ans2[44]=11; ans1[45]=7,ans2[45]=11; ans1[46]=7,ans2[46]=11; ans1[47]=7,ans2[47]=11; ans1[48]=6,ans2[48]=14; ans1[49]=6,ans2[49]=14; ans1[50]=6,ans2[50]=14; ans1[51]=6,ans2[51]=14; ans1[52]=8,ans2[52]=13; ans1[53]=8,ans2[53]=13; ans1[54]=8,ans2[54]=13; ans1[55]=8,ans2[55]=13; ans1[56]=8,ans2[56]=13; ans1[57]=6,ans2[57]=14; ans1[58]=6,ans2[58]=14; ans1[59]=6,ans2[59]=14; ans1[60]=8,ans2[60]=13; ans1[61]=8,ans2[61]=13; ans1[62]=6,ans2[62]=14; ans1[63]=6,ans2[63]=14; ans1[64]=6,ans2[64]=14; ans1[65]=8,ans2[65]=13; ans1[66]=8,ans2[66]=13; ans1[67]=8,ans2[67]=13; ans1[68]=8,ans2[68]=13; ans1[69]=7,ans2[69]=17; ans1[70]=7,ans2[70]=17; ans1[71]=7,ans2[71]=17; ans1[72]=7,ans2[72]=17; ans1[73]=7,ans2[73]=17; ans1[74]=9,ans2[74]=14; ans1[75]=7,ans2[75]=17; ans1[76]=7,ans2[76]=17; ans1[77]=7,ans2[77]=17; ans1[78]=7,ans2[78]=17; ans1[79]=7,ans2[79]=17; ans1[80]=10,ans2[80]=16; ans1[81]=10,ans2[81]=16; ans1[82]=10,ans2[82]=16; ans1[83]=10,ans2[83]=16; ans1[84]=8,ans2[84]=19; ans1[85]=8,ans2[85]=19; ans1[86]=8,ans2[86]=19; ans1[87]=8,ans2[87]=19; ans1[88]=6,ans2[88]=20; ans1[89]=10,ans2[89]=17; ans1[90]=11,ans2[90]=15; ans1[91]=11,ans2[91]=15; ans1[92]=11,ans2[92]=15; ans1[93]=11,ans2[93]=15; ans1[94]=11,ans2[94]=18; ans1[95]=11,ans2[95]=18; ans1[96]=12,ans2[96]=19; ans1[97]=12,ans2[97]=19; ans1[98]=12,ans2[98]=19; ans1[99]=12,ans2[99]=19; ans1[100]=12,ans2[100]=19; ans1[101]=12,ans2[101]=19; ans1[102]=12,ans2[102]=19; ans1[103]=12,ans2[103]=19; ans1[104]=12,ans2[104]=19; ans1[105]=12,ans2[105]=19; ans1[106]=12,ans2[106]=19; ans1[107]=12,ans2[107]=19; ans1[108]=12,ans2[108]=19; ans1[109]=12,ans2[109]=19; ans1[110]=12,ans2[110]=19; ans1[111]=13,ans2[111]=18; ans1[112]=12,ans2[112]=19; ans1[113]=12,ans2[113]=19; ans1[114]=12,ans2[114]=19; ans1[115]=12,ans2[115]=19; ans1[116]=12,ans2[116]=19; ans1[117]=12,ans2[117]=19; ans1[118]=12,ans2[118]=19; ans1[119]=12,ans2[119]=19; ans1[120]=12,ans2[120]=19; ans1[121]=12,ans2[121]=19; ans1[122]=12,ans2[122]=19; ans1[123]=7,ans2[123]=23; ans1[124]=7,ans2[124]=23; ans1[125]=8,ans2[125]=27; ans1[126]=8,ans2[126]=27; ans1[127]=8,ans2[127]=27; ans1[128]=9,ans2[128]=23; ans1[129]=9,ans2[129]=23; ans1[130]=9,ans2[130]=23; ans1[131]=9,ans2[131]=30; ans1[132]=9,ans2[132]=30; ans1[133]=14,ans2[133]=22; ans1[134]=14,ans2[134]=22; ans1[135]=10,ans2[135]=26; ans1[136]=14,ans2[136]=22; ans1[137]=8,ans2[137]=27; ans1[138]=8,ans2[138]=27; ans1[139]=14,ans2[139]=22; ans1[140]=8,ans2[140]=27; ans1[141]=8,ans2[141]=27; ans1[142]=10,ans2[142]=26; ans1[143]=8,ans2[143]=27; ans1[144]=8,ans2[144]=27; ans1[145]=8,ans2[145]=27; ans1[146]=8,ans2[146]=27; ans1[147]=8,ans2[147]=27; ans1[148]=8,ans2[148]=27; ans1[149]=8,ans2[149]=27; ans1[150]=8,ans2[150]=27; ans1[151]=8,ans2[151]=27; ans1[152]=8,ans2[152]=27; ans1[153]=9,ans2[153]=30; ans1[154]=9,ans2[154]=30; ans1[155]=9,ans2[155]=30; ans1[156]=9,ans2[156]=30; ans1[157]=9,ans2[157]=30; ans1[158]=9,ans2[158]=30; ans1[159]=9,ans2[159]=30; ans1[160]=9,ans2[160]=30; ans1[161]=9,ans2[161]=30; ans1[162]=9,ans2[162]=30; ans1[163]=9,ans2[163]=30; ans1[164]=9,ans2[164]=30; ans1[165]=9,ans2[165]=30; ans1[166]=9,ans2[166]=30; ans1[167]=9,ans2[167]=30; ans1[168]=9,ans2[168]=30; ans1[169]=9,ans2[169]=30; ans1[170]=9,ans2[170]=30; ans1[171]=9,ans2[171]=30; ans1[172]=12,ans2[172]=31; ans1[173]=12,ans2[173]=31; ans1[174]=12,ans2[174]=31; ans1[175]=12,ans2[175]=31; ans1[176]=10,ans2[176]=34; ans1[177]=10,ans2[177]=34; ans1[178]=10,ans2[178]=34; ans1[179]=10,ans2[179]=33; ans1[180]=10,ans2[180]=34; ans1[181]=10,ans2[181]=34; ans1[182]=10,ans2[182]=34; ans1[183]=10,ans2[183]=34; ans1[184]=10,ans2[184]=34; ans1[185]=10,ans2[185]=34; ans1[186]=10,ans2[186]=34; ans1[187]=10,ans2[187]=34; ans1[188]=12,ans2[188]=31; ans1[189]=12,ans2[189]=31; ans1[190]=12,ans2[190]=31; ans1[191]=12,ans2[191]=31; ans1[192]=12,ans2[192]=31; ans1[193]=12,ans2[193]=31; ans1[194]=12,ans2[194]=31; ans1[195]=12,ans2[195]=31; ans1[196]=12,ans2[196]=31; ans1[197]=17,ans2[197]=27; ans1[198]=12,ans2[198]=31; ans1[199]=12,ans2[199]=31; ans1[200]=12,ans2[200]=31; } int main() { chushihua(); int t; scanf("%d",&t); while (t--) { int n; scanf("%d",&n); printf("1 %d %d\n",ans1 ,ans2 ); } }
D 柱爷的恋爱
只要每个时候的前括号数都大于后括号数就满足了,方法:dfs
#include <cstdio> #include <cmath> #include <iostream> #include <cstring> #include <algorithm> #define ll long long #define mod 1000000007 using namespace std; int len; long long dp[305][305],lalal; char s[305]; ll dfs(int a,int b) { ll& res=dp[a][b]; if (res==-1) { if (a==b) { res=1; } else { res=0; char c='1'; if (s[a]=='[') { c=']'; } if (s[a]=='(') { c=')'; } if (c!='1') { for (int i=a+1;i<b;i++) { if (s[i]==c) { res=(res+dfs(a+1,i)*dfs(i+1,b))%mod; } } } res=(res+dfs(a+1,b))%mod; } } return res; } int main() { scanf("%d\n",&len); scanf("%s",s); for (int i=0;i<=len;i++) for (int j=0;j<=len;j++) { dp[i][j]=-1; } printf("%lld\n",dfs(0,len)-1); }
E 柱爷与远古法阵
高斯消元get,在每周算法讲堂上有这道题的详解.
#include <cstdio> #include <cmath> #include <iostream> #include <cstring> #include <algorithm> #define eps 1e-14 using namespace std; long double a[505][505],lalala; int n,m,fa[505]; int main() { scanf("%d%d",&n,&m); for (int i=1;i<=n;i++) { fa[i]=i; } for (int i=1;i<=m;i++) { int x,y; scanf("%d%d",&x,&y); fa[x]=y; } for (int i=1;i<n;i++) { a[i][i]=6; if (fa[i]!=i) a[i][fa[i]]=-6; else { a[i][n+1]=6; for (int j=1;j<=6;j++) { if (i+j<=n) a[i][i+j]=-1.0; else a[i][i]-=1.0; } } } a =1.0; a [n+1]=0; for (int i=1;i<=n;i++) { int p=i; for (int j=i+1;j<=n;j++) { if(fabs(a[j][i])>eps) { p=j; } } if (fabs(a[p][i])>eps) { for (int j=i;j<=n+1;j++) { swap(a[i][j],a[p][j]); } for (int j=i+1;j<=n;j++) { if (fabs(a[j][i])>eps) { long double k=a[j][i]/a[i][i]; for (int t=i;t<=n+1;t++) a[j][t]-=a[i][t]*k; } } } } for(int i=n; i>=1; i--) { for(int j=i+1; j<=n; j++) if(fabs(a[i][j])>eps) a[i][n+1]-=a[i][j]*a[j][n+1]; if(abs(a[i][i])<=eps&&abs(a[i][n+1])>eps) { printf("-1\n"); return 0; } a[i][n+1]/=a[i][i]; } printf("%.12Lf",a[1][n+1]); }
相关文章推荐
- 2016 UESTC Training for Dynamic Programming H - 柱爷大战滑稽王 LCS转LIS
- 2016 UESTC Training for Dynamic Programming J - 柱爷抢银行II dp单调队列优化
- 2016 UESTC Training for Dynamic Programming L - 柱爷抢银行MkⅣ dp 线段树优化
- 2016 UESTC Training for Dynamic Programming M - 柱爷抢银行欢庆5.1special 递推
- 2016 UESTC Training for Dynamic Programming N - 柱爷与子序列 这题和N题有些相似之处、用了树状数组
- 2016 UESTC Training for Dynamic Programming P - 柱爷的矩阵 矩阵、递推
- 2016 UESTC Training for Dynamic Programming Q - 柱爷的宝藏 斜率优化
- 2016 UESTC Training for Dynamic Programming A - 柱爷与咸鱼神功 0-1背包
- 2016 UESTC Training for Dynamic Programming B - 柱爷与最大区间和 最大区间和推广、前缀和、枚举间隔点
- 2016 UESTC Training for Dynamic Programming C - 柱爷的下凡 预处理打表、背包问题
- 2016 UESTC Training for Dynamic Programming D - 柱爷的恋爱 区间dp、记忆化搜索
- 2016 UESTC Training for Dynamic Programming F - 柱爷与三叉戟不得不说的故事 压位dp
- UESTC_邱老师选妹子(二) 2015 UESTC Training for Dynamic Programming<Problem I>
- UESTC_男神的约会 2015 UESTC Training for Dynamic Programming<Problem J>
- UESTC_摩天轮 2015 UESTC Training for Dynamic Programming<Problem K>
- 2015 UESTC Training for Dynamic Programming J - 男神的约会(bfs)
- UESTC_菲波拉契数制升级版 2015 UESTC Training for Dynamic Programming<Problem L>
- 2015 UESTC Training for Dynamic Programming A- 男神的礼物(区间dp)
- UESTC_酱神的旅行 2015 UESTC Training for Dynamic Programming<Problem M>
- UESTC_导弹拦截 2015 UESTC Training for Dynamic Programming<Problem N>