题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6667
思路:求个sum总和,另外再设个变量s=sum;
for循环遍历过去 第i个的时候 他可以喝h=min(a【i】,sum-b【i】)杯奶茶 ,
每次用s减去喝掉的 当s<0的时候代表没有足够的可以喝了 h就赋值为剩下的奶茶数量
ans每次累加h的值
#include<bits/stdc++.h> using namespace std; #define ll long long ll a[1000005],b[1000005]; int main() { int i,j,n,m,t; scanf("%d",&t); while(t--) { scanf("%d",&n); ll sum=0; for(i=1;i<=n;i++) { scanf("%lld%lld",&a[i],&b[i]); sum+=b[i]; } ll s=sum; ll ans=0; for(i=1;i<=n;i++) { ll wai=sum-b[i];//除了自己的,外面有多少奶茶 int h=min(wai,a[i]);//可以喝的 if(s-h<0)h=s;//不够了 h就赋值为剩下的奶茶数量 s-=h; ans+=h;//累加 } cout<<ans<<endl; } return 0; }