题目描述:
链接:https://ac.nowcoder.com/acm/contest/317/C
来源:牛客网
思路:dp找到1——n星球的最大耐久度
代码如下:
1 #include<bits/stdc++.h> 2 using namespace std; 3 #define ll long long 4 5 int main() 6 { 7 int n,a[3005],dp[3005]; 8 while(cin >> n) 9 { 10 memset(dp,0,sizeof(dp)); 11 for(int i = 1;i <= n;i++) 12 cin >> a[i]; 13 dp[1] = a[1]; 14 //从第二个星球开始遍历寻找最大耐久度 15 for(int i = 2;i <= n;i++) 16 { 17 for(int j = 1;j < i;j++)//从j到i星球 18 if(a[i] < a[j] && dp[j])//如果从j可以到i星球而且从1号星球可以到达j星球 19 dp[i] = max(dp[i],dp[j] ^ a[i]);//更新i星球的最大耐久度 20 } 21 if(dp[n]) 22 cout << dp[n] << endl; 23 else 24 cout << -1 << endl; 25 } 26 return 0; 27 }