2021.6.19 开心赛
题外话:今天考了一天的文化课,晚上到机房又要被开心赛鞭挞。嘤嘤嘤~
1.方格取数
这题已经老生常谈了,不再多说。建议做完之后做传纸条,一份题解,双份快乐。
1 #include<bits/stdc++.h> 2 using namespace std; 3 int n; 4 int a[105][105]; 5 int sum[105][105][105][105]={}; 6 7 int main() 8 { 9 int x,y,z; 10 scanf("%d",&n); 11 scanf("%d %d %d",&x,&y,&z); 12 while(x&&y&&z) 13 { 14 a[x][y]=z; 15 scanf("%d %d %d",&x,&y,&z); 16 } 17 for(int i=1;i<=n;i++) 18 { 19 for(int j=1;j<=n;j++) 20 { 21 for(int k=1;k<=n;k++) 22 { 23 for(int h=1;h<=n;h++) 24 { 25 int max1=max(sum[i-1][j][k-1][h],sum[i][j-1][k][h-1]); 26 int max2=max(sum[i-1][j][k][h-1],sum[i][j-1][k-1][h]); 27 sum[i][j][k][h]=max(max1,max2)+a[i][j]; 28 if(i!=k&&j!=h) 29 { 30 sum[i][j][k][h]+=a[k][h];//加当前该点的 31 } 32 } 33 } 34 } 35 } 36 printf("%d",sum[n][n][n][n]); 37 return 0; 38 } 39 /* 40 8 41 2 3 13 42 2 6 6 43 3 5 7 44 4 4 14 45 5 2 21 46 5 6 4 47 6 3 15 48 7 2 14 49 0 0 0 50 */
2.花店橱窗布置
这题我没看出来是区间dp.区间dp的题解我先咕一咕,今天实在不想写了。
先放个代码吧
1 #include <bits/stdc++.h> 2 using namespace std; 3 int f,v; 4 int a[1005][1005],b[1005][1005]={},c[1005][1005]; 5 int bai[10005]; 6 int k; 7 8 int main() 9 { 10 scanf("%d %d",&f,&v); 11 memset(b,128,sizeof(b)); 12 for(int i=1;i<=v-f+1;i++) 13 { 14 b[1][i]=a[1][i];//第一行前只有第一行 15 } 16 17 for(int i=2;i<=f;i++)//放哪朵 18 { 19 for(int j=i;j<=v-f+i;j++) 20 { 21 for(k=i-1;k<=j-1;k++) 22 { 23 /*b[i][j]=max(b[i-1][k]+a[i][j],b[i][j]); 24 c[i][j]=k;*///不可以写成这个样子,if里有两句 25 if (b[i-1][k]+a[i][j]>b[i][j]) 26 { 27 b[i][j]=b[i-1][k]+a[i][j]; 28 c[i][j]=k; 29 } 30 } 31 } 32 } 33 34 35 int max=-2100000000; 36 for(int i=f;i<=v;i++) 37 { 38 if(b[f][i]>max) 39 { 40 max=b[f][i]; 41 k=i; 42 } 43 } 44 printf("%d\n",max); 45 for(int i=1;i<=f;i++) 46 { 47 bai[i]=k; 48 k=c[f-i+1][k]; 49 } 50 for(int i=f;i>=2;i--) 51 { 52 printf("%d ",bai[i]); 53 } 54 printf("%d",bai[1]); 55 return 0; 56 } 57 /* 58 3 5 59 7 23 -5 -24 16 60 5 21 -4 10 23 61 -21 5 -4 -20 20 62 */