本文主要是介绍vua 10700-Camel trading 贪心以及栈,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
大意:给一个表达式,可以让你任意套括号,问套完括号最大最小值是多少
贪心策略:最大的话,先+后*
最小的话,先*后+
用了一个栈堆模拟运算的次序
#include<stdio.h>
#include<iostream>
#include<stack>
using namespace std;
int main()
{int N;scanf("%d",&N);for(int cases=1;cases<=N;cases++){stack<unsigned long long int>S;stack<unsigned long long int>Q;char m;unsigned long long int sum1=1,sum2=0,n;scanf("%llu",&n);/*先将第一个数放入栈堆*/S.push(n);Q.push(n);while((m=getchar())!='\n'){scanf("%llu",&n);if(m=='*'){S.push(n);n=n*Q.top();Q.pop();Q.push(n);}else if(m=='+'){Q.push(n);n=n+S.top();S.pop();S.push(n);}}while(!S.empty()){sum1*=S.top();S.pop();}while(!Q.empty()){sum2+=Q.top();Q.pop();}printf("The maximum and minimum are %llu and %llu.\n",sum1,sum2);}return 0;
}
这篇关于vua 10700-Camel trading 贪心以及栈的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!