B:Buggy Robot

【题意】

一个n*m的地图(1≤n, m≤50),有一个入口和一个出口。给定一个命令序列(上,下,左,右),如果碰到障碍或者边际就忽略。问至少加入或删除多少个的命令,使得能从入口走到出口。

【题解】

f[i][j][k]表示在位置(i,j),匹配到命令序列的第k项,至少加入或删除多少个的命令。

 

D:Contest Strategy

【题意】

一场ACM有n题,做第i题要$t_i$的时间。

有n!种读题顺序,做题策略是这样的:

1.先随机读k道题;

2.在读过的题中做用时最少的题(有多个就随便选一个)

3.从没读过的题中随机选一题(如果有的话)

4.如果还有题没有做,跳到步骤2

求n!种情况的罚时之和。

【题解】

这道题可以做到O(n)(不算排序)

容易知道第i个做出来的题系数为n-i+1

容易知道最后做出来的k-1道题一定是用时前k-1大的。

我们从后往前考虑。

先把时间从大到小排序。

改一下规则,如果在读过的题中有多个用时最少,选下标最大的。

记f[i]表示只考虑前i道题时的答案。

f[1]=t[1]

当1<i<=k时,

$f[i]=f[i-1]*i+i!*t[i]*i$

当k<i<=n时,

这道题如果一旦被读过,就一定会立刻做。

我们要算这道题的贡献和它造成其他题罚时的增量。

分两种情况考虑,

1)这道题是第1道做出来的题

2)这道题是第2...i-k+1道做出来的题目

看程序注释

  1 #include<cstdio>
  2 #include<cstdlib>
  3 #include<cassert>
  4 #include<iostream>
  5 #include<fstream>
  6 #include<algorithm>
  7 #include<cstring>
  8 #include<string>
  9 #include<cmath>
 10 #include<queue>
 11 #include<stack>
 12 #include<map>
 13 #include<utility>
 14 #include<set>
 15 #include<bitset>
 16 #include<vector>
 17 #include<functional>
 18 #include<deque>
 19 #include<cctype>
 20 #include<climits>
 21 #include<complex>
 22 #include<bits/stdc++.h>
 23 #include<ctime>
 24 
 25 using namespace std;
 26 
 27 typedef long long LL;
 28 typedef double DB;
 29 typedef pair<int,int> PII;
 30 typedef pair<DB,DB> PDD;
 31 typedef complex<DB> CP;
 32 typedef vector<int> VI;
 33 
 34 #define mmst(a,v) memset(a,v,sizeof(a))
 35 #define mmcy(a,b) memcpy(a,b,sizeof(a))
 36 #define fill(a,l,r,v) fill(a+l,a+r+1,v)
 37 #define re(i,a,b)  for(i=(a);i<=(b);i++)
 38 #define red(i,a,b) for(i=(a);i>=(b);i--)
 39 #define fi first
 40 #define se second
 41 #define mp(a,b) make_pair(a,b)
 42 #define pb(a) push_back(a)
 43 #define two(k) (1<<(k))
 44 #define SZ(x) (int(x.size()))
 45 #define all(x) (x).begin(),(x).end()
 46 #define ire(i,v,x) for(i=0,v=i<SZ(x)?x[i]:0;i<SZ(x);v=x[++i])
 47 #define ls (rt<<1)
 48 #define rs (rt<<1|1)
 49 #define MID ((l+r)>>1)
 50 
 51 template<class T>inline T sqr(T x){return x*x;}
 52 template<class T>inline void upmin(T &t,T tmp){if(t>tmp)t=tmp;}
 53 template<class T>inline void upmax(T &t,T tmp){if(t<tmp)t=tmp;}
 54 
 55 inline int sgn(DB x){if(fabs(x)<1e-9)return 0;return(x>0)?1:-1;}
 56 const DB Pi=acos(-1.0);
 57 
 58 int gint()
 59   {
 60         int res=0;bool neg=0;char z;
 61         for(z=getchar();z!=EOF && z!='-' && !isdigit(z);z=getchar());
 62         if(z==EOF)return 0;
 63         if(z=='-'){neg=1;z=getchar();}
 64         for(;z!=EOF && isdigit(z);res=(res<<3)+(res<<1)+z-'0',z=getchar());
 65         return (neg)?-res:res;
 66     }
 67 LL gll()
 68   {
 69       LL res=0;bool neg=0;char z;
 70         for(z=getchar();z!=EOF && z!='-' && !isdigit(z);z=getchar());
 71         if(z==EOF)return 0;
 72         if(z=='-'){neg=1;z=getchar();}
 73         for(;z!=EOF && isdigit(z);res=res*10+z-'0',z=getchar());
 74         return (neg)?-res:res;
 75     }
 76 
 77 const int maxn=310;
 78 const int MOD=1000000007;
 79 
 80 int n,k;
 81 LL t[maxn],s[maxn],fact[maxn],f[maxn];
 82 
 83 bool cmp(LL a,LL b){return a>b;}
 84 
 85 int main()
 86   {
 87       freopen("D.in","r",stdin);
 88       int i;
 89       n=gint();k=gint();
 90       re(i,1,n)t[i]=gint();
 91       sort(t+1,t+n+1,cmp);
 92       re(i,1,n)s[i]=(s[i-1]+t[i])%MOD;
 93       fact[0]=1;re(i,1,n)fact[i]=fact[i-1]*i%MOD;
 94       LL temp=0;
 95       re(i,1,k-1)(temp+=t[i]*i)%=MOD;
 96       f[1]=t[1];
 97       re(i,2,k)f[i]=(f[i-1]*i%MOD+fact[i]*t[i]%MOD*i%MOD)%MOD;
 98       re(i,k+1,n)
 99         {
100           f[i]=f[i-1]*i%MOD;
101           (f[i]+=fact[i-1]*k%MOD*t[i]%MOD*i%MOD)%=MOD;//这道题是第1道做出来的题
102           //这道题是第2...i-k+1道做出来的题目
103           (f[i]+=fact[i-1]*(i-1+k)*(i-k)/2%MOD*t[i]%MOD)%=MOD;//这道题的贡献
104           (f[i]+=f[i-1]-(temp+(s[i-1]-s[k-1])*(k-1))*fact[i-1]%MOD)%=MOD;//它造成其他题罚时的增量
105         }
106       cout<<(f[n]%MOD+MOD)%MOD<<endl;
107       return 0;
108   }
View Code

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-06-18
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-07-12
猜你喜欢
  • 2021-11-26
  • 2021-12-28
  • 2021-05-17
  • 2022-12-23
  • 2021-08-22
  • 2021-07-29
相关资源
相似解决方案