思路:枚举星期一到星期天,找能走的最多的天数。有些细节问题。。先处理从某天开始,到该周末末尾,然后减去这些天数消耗的食物后,直接找还能走的最小周数,然后减去各类食物走这些周的花费,最后在处理剩下的食物能走多少天。
代码:
#include<bits/stdc++.h>
using namespace std;
#define inf 0x3f3f3f3f
const int maxn=10;
int a[maxn],b[maxn][maxn],t[maxn];
int main(){
int i,j,k;
for(i=1;i<=3;i++)cin>>a[i];
b[1][1]=b[1][4]=b[1][7]=b[2][2]=b[2][6]=b[3][5]=b[3][3]=1;
int ans=0;
for(i=1;i<=7;i++){
int sum=0;
for(j=1;j<=3;j++)t[j]=a[j];
int flag=0;
for(j=i;j<=7;j++){
for(k=1;k<=3;k++){
t[k]-=b[k][j];
if(t[k]<0){
flag=1;
break;
}
}
if(flag){
break;
}
else sum++;
}
sum+=min({t[1]/3*7,t[2]/2*7,t[3]/2*7});
int u=min({t[1]/3,t[2]/2,t[3]/2});
t[1]-=u*3;t[2]-=u*2;t[3]-=u*2;
flag=0;
for(j=1;j<=7;j++){
for(k=1;k<=3;k++){
t[k]-=b[k][j];
if(t[k]<0){
flag=1;
break;
}
}
if(flag){
break;
}
else sum++;
}
ans=max(sum,ans);
}
cout<<ans<<endl;
}