大盗阿福

来源:互联网 发布:linux 命令嵌套 编辑:程序博客网 时间:2024/06/09 15:34
/*【思路】:DP求出每一个状态的最优值,S[i]为盗窃前i家店铺的最优值,那么S[n]就是盗窃前n家店铺的最优值;面临的每个抉择就是这个店铺盗还是不盗?那就从盗和不盗中选择一个最优值。盗:S[i-2]+a[i];为前i-2家店铺的最优值+现在盗的店铺;不盗:S[i-1];就是前S[i-1]家店铺的最优值;最后输出S[n]*/ #include <iostream>#include <algorithm>#include <cstring>using namespace std;int A[100000];int S[100000];int main(int argc, char const *argv[]){int num;cin>>num;while(num --){memset(S,0,sizeof(S));int n;cin>>n;for (int i = 0; i < n; ++i){cin>> A[i];/* code */}for (int i = 0; i < n; ++i){if (i == 0){S[i] = A[i];/* code */}else if(i == 1){if (A[i]>A[i-1]){S[i] = A[i];}else{S[i] = A[i - 1];}}else{if (A[i] + S[i-2] > S[i-1]){S[i] = A[i] + S[i-2];}else {S[i] = S[i-1];}}}cout<< S[n-1]<<endl;}}

原创粉丝点击