题面:
假设他拥有N格体力。初始摩擦值为0,每次可以选择可以摩擦或者行走。摩擦消耗两格体力,第n次的摩擦值=第n-1次的摩擦值*2+2。行走消耗一格体力,第n次的摩擦值=第n-1次的摩擦值*1+1。求最大的摩擦值为多少?
思路:
贪心,消耗两格体力比消耗一格体力更优,所以如果n为奇数则先消耗一格体力,成为偶数,偶数的话全部消耗两个体力。
代码:
1 #include<bits/stdc++.h> 2 using namespace std; 3 int n,x; 4 long long ans; 5 const int p=1000000007; 6 int main(){ 7 scanf("%d",&n); 8 for (int i=1;i<=n;i++){ 9 scanf("%d",&x); 10 if (x%2==0){ 11 ans=0; 12 for (int i=1;i<=x/2;i++){ 13 ans=(ans*2+2)%p; 14 } 15 }else{ 16 ans=1; 17 for (int i=1;i<=x/2;i++){ 18 ans=(ans*2+2)%p; 19 } 20 }printf("%lld ",ans); 21 } 22 }