题目:http://exam.upc.edu.cn/problem.php?id=5500&csrf=oblCjcydRSDajHqeVcFWEOpHA4jhISYF
思路:用ans储存金钱总量,假设已知在哪开采在哪不开采,k=(1-0.01k)
ans=w*a[1]+w*k*a[2]+w*k^2*a[3]+...+w*k^(n-2)*a[n-1]+w*k^(n-1)*a[n]
=w*(a[1]+(a[2]+(a[3]+...+(k*a[n]+a[n-1])*k)*k)*k)*k
=w*(a[1]+(a[2]+(a[3]+...+(a[n-1]+(a[n]+a[n+1]*k)*k)*k)*k)*k)*k
其中a[n+1]*k是为了凑格式加的,令a[n+1]=0即可。
维修的同理,根据秦九韶算法(点击查看),立案是合并即可
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#define maxn 100005
using namespace std;
int n,a[maxn],x[maxn];
double k,c,w,ans=0.000;
int main(){
scanf("%d",&n);
scanf("%lf%lf%lf",&k,&c,&w);
for(int i=1;i<=n;++i)scanf("%d%d",&x[i],&a[i]);
k=1.00-0.01*k;c=1+0.01*c;
for(int i=n;i>=1;--i){
if(x[i]==1){
ans=max(ans,ans*k+a[i]);
}
else ans=max(ans,ans*c-a[i]);
}
//ans=ans*w;
printf("%.2lf\n",ans*w);
return 0;
}