烦人的dp
1050
1 #include<cstring> 2 #include<iostream> 3 #include<cstdio> 4 5 using namespace std; 6 7 int main() 8 { 9 int n; 10 while(cin>>n) 11 { 12 int a[200][200]; 13 memset(a,0,sizeof(a)); 14 for(int i=1;i<=n;i++) 15 for(int j=1;j<=n;j++) 16 { 17 cin>>a[i][j]; 18 a[i][j]+=a[i-1][j]; 19 } 20 int maxn=-0x3f3f3f3f; 21 int b[200],dp[20000]; 22 memset(dp,0,sizeof(dp)); 23 for(int i=1;i<=n;i++) 24 { 25 for(int j=i;j<=n;j++) 26 { 27 for(int k=1;k<=n;k++) 28 { 29 b[k]=a[j][k]-a[i-1][k]; 30 } 31 int sum=0; 32 for(int k=1;k<=n;k++) 33 { 34 if(sum+b[k]<0){ 35 sum=b[k]; 36 } 37 else { 38 sum+=b[k]; 39 if(sum>maxn) maxn=sum; 40 } 41 } 42 } 43 } 44 cout<<maxn<<endl; 45 } 46 } 47 //最大连续子序列
1083
1 #include<cstring> 2 #include<iostream> 3 #include<cstdio> 4 5 using namespace std; 6 7 int main() 8 { 9 int T; 10 cin>>T; 11 while(T--) 12 { 13 int n; 14 int a[500]; 15 int b[500]; 16 cin>>n; 17 memset(a,0,sizeof(a)); 18 memset(b,0,sizeof(b)); 19 while(n--) 20 { 21 int x,y; 22 cin>>x>>y; 23 if(x>y) swap(x,y); 24 if(y%2) y++; 25 for(int i=x;i<=y;i++) 26 { 27 if(i%2) a[i]++; 28 else b[i]++; 29 } 30 } 31 int maxn=0; 32 for(int i=0;i<=400;i++) 33 { 34 // cout<<a[i]<<' '<<b[i]<<endl; 35 maxn=max(maxn,max(a[i],b[i])); 36 } 37 cout<<maxn*10<<endl; 38 } 39 } 40 //标记走过路径
1088
DFS+DP