题目链接;http://acm.hust.edu.cn/vjudge/contest/view.action?cid=82842#problem/E 订外卖
解题思路:定义两个数组,a[]表示满A,b[]表示减B,即满A-B表示为a[i]-b[i],x用来存储买一次外卖花的钱,将f赋一个比较大的值,将每输入的一次x与a[i]做对比后,再与b[i]做差值,并赋给j,再在j与f中取最小的,循环完后即是最优惠方案了。
程序代码:
1 #include <iostream> 2 #include <algorithm> 3 #include <cstring> 4 #include <cstdio> 5 using namespace std; 6 int a[105],b[105]; 11 int main() 12 { 13 int t;cin>>t; 14 while(t--) 15 { 16 memset(a,0,sizeof(a)); 17 memset(b,0,sizeof(b)); 18 int n,i,m; 19 cin>>n>>m; 20 for( i=0;i<n;i++) 21 scanf("%d%d",&a[i],&b[i]); 22 int sum=0; 23 while(m--) 24 { 25 int j,x,f=10000; 26 scanf("%d",&x); 27 for( i=0;i<n;i++) 28 if(x>=a[i]) { j=x-b[i]; if(j<f) f=j;} 29 if(f==10000) 30 sum=sum+x; 31 else sum=sum+f; 32 } 33 cout<<sum<<endl; 34 35 } 36 return 0; 37 }
版权声明:此代码归属博主, 请务侵权!