DiV1
300:给一组士兵再给一组战马都有权值。
安排战马的顺序的方案数,是第一个士兵和其战马的权值乘积最大。
做法:随便暴力就好。
枚举战马和第一个士兵匹配。其他士兵按权值从大到小排序,战马权值按从小到大排序。1.
举个例子:士兵,A,B,C,D,E
战马,a,b,c,d,e
第一个士兵和其战马的乘积是:tmp
A 可以A*c<tmp;
B 可以 B*d<tmp;
B 与战马的乘积小于tmp,其战马的权值一定大于等于c,因为 1.
所以答案就是ans = (c-第几个士兵+1)*(d-第几个士兵+1)...
1 #include2 3 using namespace std; 4 typedef long long ll; 5 6 #define mod 1000000007 7 8 int a[12345],b[12345]; 9 10 class BearCavalry {11 public:12 int countAssignments(vector warriors, vector horses) {13 int n=warriors.size();14 for (int i=0;i 1) x=0;43 int xx=x+1-(i-1);44 if (xx<0) xx=0;45 num=num*xx%mod;46 }47 ans=(ans+num)%mod;48 // cout< < >n;61 vector aa,ba;62 for (int i=1;i<=n;i++)63 {64 int x;65 cin>>x;66 aa.push_back(x);67 }68 for (int i=1;i<=n;i++)69 {70 int x;71 cin>>x;72 ba.push_back(x);73 }74 75 cout<