updata:
2018-5-12
免费馅饼
1 #include<bits/stdc++.h> 2 #define cl(a,b) memset(a,b,sizeof(a)) 3 #define debug(a) cerr<<#a<<"=="<<a<<endl 4 using namespace std; 5 typedef long long ll; 6 typedef pair<int,int> pii; 7 8 const int maxn=1e4+10; 9 10 int mp[maxn][maxn]; 11 int dp[maxn][maxn][2]; 12 13 int main() 14 { 15 int n,m; 16 scanf("%d%d",&n,&m); 17 for(int i=0;i<n;i++) 18 { 19 for(int j=0;j<m;j++) 20 { 21 scanf("%d",&mp[i][j]); 22 } 23 } 24 for(int i=0;i<n;i++) 25 { 26 dp[i][0][0]=mp[i][0]; 27 dp[i][0][1]=mp[i][0]*-1; 28 } 29 for(int j=1;j<=m;j++) 30 { 31 dp[0][j][0]=max(dp[1][j-1][0],dp[0][j-1][0])+mp[0][j]; 32 dp[0][j][1]=max(max(dp[1][j-1][0],dp[0][j-1][0])+mp[0][j]*-1, 33 max(dp[1][j-1][1],dp[0][j-1][1])+mp[0][j]); 34 35 dp[n-1][j][0]=max(dp[n-1][j-1][0],dp[n-2][j-1][0])+mp[n-1][j]; 36 dp[n-1][j][1]=max(max(dp[n-1][j-1][0],dp[n-2][j-1][0])+mp[n-1][j]*-1, 37 max(dp[n-1][j-1][1],dp[n-2][j-1][1])+mp[n-1][j]); 38 39 for(int i=1;i<n-1;i++) 40 { 41 dp[i][j][0]=max(dp[i][j-1][0],max(dp[i-1][j-1][0],dp[i+1][j-1][0]))+mp[i][j]; 42 43 dp[i][j][1]=max(max(dp[i][j-1][0],max(dp[i-1][j-1][0],dp[i+1][j-1][0]))+mp[i][j]*-1, 44 max(dp[i][j-1][1],max(dp[i-1][j-1][1],dp[i+1][j-1][1]))+mp[i][j]); 45 46 } 47 } 48 int ans=-1; 49 for(int i=0;i<n;i++) 50 { 51 for(int j=0;j<=m;j++) 52 { 53 // printf("%d ",dp[i][j][1]); 54 ans=max(ans,max(dp[i][j][0],dp[i][j][1])); 55 } 56 // printf(" "); 57 } 58 printf("%d ",ans); 59 return 0; 60 }/* 61 62 4 3 63 1 -4 10 64 3 -2 -1 65 2 -1 0 66 0 5 -2 67 68 */
----------------------------------------------------------------
有几个题没有留
答完才发现是按最高分算 不是最后提交的
早知道就不存备份了
A.显然没有找到正解 直接set走一波到80%了
lower_bound竟然才30% 玄学啊...
1 #include<bits/stdc++.h> 2 #define cl(a,b) memset(a,b,sizeof(a)) 3 #define debug(a) cerr<<#a<<"=="<<a<<endl 4 using namespace std; 5 typedef long long ll; 6 typedef pair<int,int> pii; 7 8 const int maxn=1e6+1000; 9 10 set<int>st; 11 12 int main() 13 { 14 int n,k,x; 15 scanf("%d%d",&n,&k); 16 for(int i=0;i<n;i++) 17 { 18 scanf("%d",&x); 19 st.insert(x); 20 } 21 int ans=0; 22 for(auto i:st) 23 { 24 if(st.find(i+k)!=st.end()) ans++; 25 } 26 printf("%d ",ans); 27 return 0; 28 }/* 29 30 6 2 31 1 5 3 3 4 2 32 33 */
B.是一个关于字符串处理的题 反正是有两种操作 问最快处理到当前串的步数
算了下复杂度感觉bfs走一波应该没问题 最后70分也懒得优化了
//也是暴力走一波到70 代码没留
C.中缀转后缀这种东西我怎么会自己写
1 #coding=utf-8 2 3 import sys 4 5 6 def show(num): 7 line1 = "" 8 line2 = "" 9 line3 = "" 10 line4 = "" 11 line5 = "" 12 st = str(num) 13 first = 1 14 for i in st : 15 if first != 1: 16 line1 += '..' 17 line2 += '..' 18 line3 += '..' 19 line4 += '..' 20 line5 += '..' 21 first = 0 22 if i == '0' : 23 line1 += '66666' 24 line2 += '6...6' 25 line3 += '6...6' 26 line4 += '6...6' 27 line5 += '66666' 28 if i == '1' : 29 line1 += '....6' 30 line2 += '....6' 31 line3 += '....6' 32 line4 += '....6' 33 line5 += '....6' 34 if i == '2' : 35 line1 += '66666' 36 line2 += '....6' 37 line3 += '66666' 38 line4 += '6....' 39 line5 += '66666' 40 if i == '3' : 41 line1 += '66666' 42 line2 += '....6' 43 line3 += '66666' 44 line4 += '....6' 45 line5 += '66666' 46 if i == '4' : 47 line1 += '6...6' 48 line2 += '6...6' 49 line3 += '66666' 50 line4 += '....6' 51 line5 += '....6' 52 if i == '5' : 53 line1 += '66666' 54 line2 += '6....' 55 line3 += '66666' 56 line4 += '....6' 57 line5 += '66666' 58 if i == '6' : 59 line1 += '66666' 60 line2 += '6....' 61 line3 += '66666' 62 line4 += '6...6' 63 line5 += '66666' 64 if i == '7' : 65 line1 += '66666' 66 line2 += '....6' 67 line3 += '....6' 68 line4 += '....6' 69 line5 += '....6' 70 if i == '8' : 71 line1 += '66666' 72 line2 += '6...6' 73 line3 += '66666' 74 line4 += '6...6' 75 line5 += '66666' 76 if i == '9' : 77 line1 += '66666' 78 line2 += '6...6' 79 line3 += '66666' 80 line4 += '....6' 81 line5 += '66666' 82 print line1 83 print line2 84 print line3 85 print line4 86 print line5 87 88 if __name__ == "__main__": 89 n = int(sys.stdin.readline()) 90 for i in range(n): 91 line = sys.stdin.readline() 92 res = eval(line) 93 # print(res) 94 show(res)
D.暴力一波走了30分 其他的肝不动了= =
E.这个复杂度高的一批 数据太水了吧
(虽然加了一点玄学优化 可能就给优化掉了?
1 #include<bits/stdc++.h> 2 #define cl(a,b) memset(a,b,sizeof(a)) 3 #define debug(a) cerr<<#a<<"=="<<a<<endl 4 using namespace std; 5 typedef long long ll; 6 typedef pair<int,int> pii; 7 8 const int maxn=1e6+10; 9 10 int n,k,h,mx; 11 bool high[maxn<<1]; 12 int dp[maxn<<1]; 13 14 void check() 15 { 16 dp[0]=0; 17 for(int i=0;i<=mx;i++) 18 { 19 for(int j=i+1;j<=i+h;j++) 20 { 21 if(high[j]) dp[2*j-i]=min(dp[2*j-i],dp[i]+1); 22 } 23 } 24 25 } 26 27 int main() 28 { 29 int x,ans=-1; 30 mx=-1; 31 scanf("%d%d%d",&n,&k,&h); 32 33 for(int i=0;i<n;i++) 34 { 35 scanf("%d",&x); 36 high[x]=true; 37 mx=max(mx,x); 38 } 39 cl(dp,0x3f); 40 check(); 41 for(int i=(mx<<1);i>=0;i--) 42 { 43 if(dp[i]<=k) 44 { 45 ans=i; 46 break; 47 } 48 } 49 printf("%d ",ans); 50 return 0; 51 }/* 52 53 3 3 2 54 1 3 6 55 56 */