小明的班上共有 n 元班费,同学们准备使用班费集体购买 3 种物品:
小明负责订购文具,设圆规,笔,笔记本的订购数量分别为 a,b,c,他订购的原则依次如下:
请你帮助小明求出满足条件的最优方案。可以证明若存在方案,则最优方案唯一。
这就是搜索的题目呀,自行用dfs或bfs解决
是NOIP A题对不对,如果可以,请采纳
#include <bits/stdc++.h>
using namespace std;
int n,ta,tb,tc; //n为总的金钱,ta,tb,tc存买的套数
int money,moneyb,maxc; //money是整套买了之后的剩下的钱,c是枚举的笔和笔记本套数,moneyb是买了a、c之后剩下的钱
int main()
{
int flag=0; //0代表当前没有方案
cin>>n;
int maxt=n/14; //为了满足第二个条件,先3件物品整套买
for(int i=maxt;i>=0;i--){ //从最大套数枚举到最小
ta = tb = tc = i ; //套数初始为i
money=n-(i14); //算出剩下的钱
maxc=money/3; //剩下的钱能买入的最多c的套数
for(int c=maxc;c>=0;c--){ //为了满足第三个条件,那么就要让3块钱的物品尽可能的多
moneyb=(money-3c); //算出能够买下物品b剩余的钱
if(moneyb%4==0){ //如果剩下的钱能买完物品b
flag=1; //那么就能产生方案
if(3*i+moneyb/4+c>ta+tb+tc){ //更新ta,tb,tc的值
ta=i;
tb=i+moneyb/4;
tc=i+c;
}
}
if(flag){ //输出方案
printf("%d %d %d\n",ta,tb,tc);
return 0;
}
}
}
printf("-1"); //否则没有方案
return 0;
}
是NOIP A题对不对,如果可以,请采纳
根据条件2:(尽可能成套)首先求总钱数n一共能买多少成套的文化用品暂定为a,并求出剩余钱数n%=14;
根据条件1:(必须全花完)在判断买完后所剩钱n数是否等于5或小于3,若满足这个条件则要减少总套数a-=1,因为当n等于5或小于3的时候不能被3或4整除,所以要n+=14,a-=1;
根据条件3:(总数尽量多)然后判断剩余钱数n是否能被3整除,若正好被3整除则c+=n/3;若余1,则b+=1,c+=n/3-1;若余2,则b+=2,c+=n/3-2即可。
望采纳
#include<iostream>
using namespace std;
int main(){
int n;
cin>>n;
int a=n/14;
n%=14;
if(n==5||n<3){
a--;
n+=14;
}
int b=a,c=a;
if(n%3==1){
b++;
c+=n/3-1;
}
else if(n%3==2){
b+=2;
c+=n/3-2;
}
else
c+=n/3;
cout<<a<<" "<<b<<" "<<c;
return 0;
}