已经用了两种方法写了。
每种方法都是9、10号测试点WA。
方法一:
#include <bits/stdc++.h>
using namespace std;
int days=0;
void dfs(int d[],int L,int R,bool flag){
if (flag) {
int l=0,r=0,count=0;
bool flag2=false;
for (int i = 0; i < R; ++i) {
if (d[i]!=0&&!flag2) {
l=i;
flag2=true;
}
if (d[i]==0&&flag2) {
r=i;
dfs(d,l,r, false);
flag2=false;
}
}
if (l==0&&r==0) {
return;
}
}
while (!flag) {
for (int i = L; i < R; ++i) {
d[i]--;
if (d[i] == 0) {
flag = true;
}
}
days++;
}
if (flag) {
int l=0,r=0,count=0;
bool flag2=false;
for (int i = L; i < R; ++i) {
if (d[i]!=0&&!flag2) {
l=i;
flag2=true;
}
if (d[i]==0&&flag2) {
r=i;
dfs(d,l,r, false);
l=0;r=0;
flag2=false;
}
}
if (l!=0){
dfs(d,l,R, false);
}
}
}
int main(){
int n,d[20000]={0};
bool flag=false;
cin>>n;
if (n==0){
cout<<0;
return 0;
}
for(int i=0;i<n;i++){
cin>>d[i];
if(d[i]==0){
flag=true;
}
}
dfs(d,0,n,flag);
cout<<days;
return 0;
}
方法二:
#include <bits/stdc++.h>
using namespace std;
int main(){
int days=0;
int n,d[20000]={0};
cin>>n;
for(int i=0;i<n;i++){
cin>>d[i];
}
int count=0;
do{
count=0;
bool flag= true;
for(int i=0;i<n;i++){
if (d[i]!=0){
count++;
}
if(d[i]!=0){
if (i==n-1&&d[i]!=0) {
days++;
}
d[i]--;
flag=true;
}else if(flag&&count>0){
days++;
flag=false;
}
}
} while (count>0);
cout<<days;
return 0;
}