1. 程式人生 > 其它 >2021.6.19 開心賽

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 */