HDU 5742 It's All In The Mind 贪心

    xiaoxiao2021-04-18  69

        题目求a1+a2/a1+a2+..+an的最大值,其中a数组最大的数为100,这个数组为非递增数组,然后给你这个数组中的部分值。

        为了求这个分数最大,肯定是要让a1+a2尽量大,然后下面的尽量小,所以如果a1,a2没给出值,就直接定为100,后面的值就以给的数为界赋值,越小越好,不断贪心赋值。最后得到的结果因为是一个分数,所以还要注意化成最简的形式。

        下面AC代码:

    #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; int a[1005]; int gcd(int a,int b) { return a%b?gcd(b,a%b):b; } int main() { int T; int n,m; int x,y; int i; int p,q; int t; int g; scanf("%d",&T); while(T--) { p=q=0; memset(a,0,sizeof(a)); scanf("%d%d",&n,&m); for(i=0;i<m;i++) { scanf("%d%d",&x,&y); a[x]=y; } if(m==0) cout<<"1/1"<<endl; else { if(a[1]==0) a[1]=100; if(a[2]==0) a[2]=a[1]; p=a[1]+a[2]; q=p; t=0; for(i=n;i>2;i--) { if(a[i]!=0) { t=a[i]; } else { a[i]=t; } q+=a[i]; } g=gcd(p,q); p=p/g; q=q/g; cout<<p<<"/"<<q<<endl; } } return 0; }

    转载请注明原文地址: https://ju.6miu.com/read-675192.html

    最新回复(0)