Noip模拟题解题报告
2018-10-17 11:30
260 查看
Pro
Sol
小 G 搭积木
一开始脑残想了一个正确的贪心策略,但没拿满。
正解:二分+贪心。
二分[1,n],mid之前的数放到一列,mid之后的数jud()函数判断能否放到mid列中。
#include<iostream> #include<cstdio> #include<algorithm> using namespace std; int n , num[5005] , l , r; bool cmp(int a , int b) { return a>b; } inline int mymin(int a , int b) { return a<b?a:b; } int jud(int x) { int opt[5005]; for(int i=1; i<=x; i++) opt[i] = num[i]; for(int i=x+1; i<=n; i++) { int maxn = 0 , pot = 0; for(int j=1; j<=x; j++) { if(opt[j]>maxn) { maxn = opt[j]; pot = j; } } if(!pot) return 0; else opt[pot] = mymin(opt[pot]-1 , num[i]); } return 1; } int main() { freopen("box.in","r",stdin); freopen("box.out","w",stdout); scanf("%d",&n); for(int i=1; i<=n; i++) scanf("%d",&num[i]); sort(num+1 , num+n+1 , cmp); l = 1 , r = n; while(l<=r) { int mid = (l+r)>>1; if(jud(mid)) r = mid - 1; else l = mid + 1; } printf("%d",l); return 0; }
小 G 的城堡
emmm,算是结论题吧……
ans=kk−1×(n−k)n−kans=k^{k-1} × (n-k)^{n-k}ans=kk−1×(n−k)n−k
#include<iostream> #include<cstdio> #define mod 1000000007 using namespace std; long long n , k; inline long long mypow(long long a , long long b) { long long t = 1; a = a%mod; while(b) { if(b&1) t = t*a%mod; a = a*a%mod; b>>=1; } return t; } int main() { freopen("castle.in","r",stdin); freopen("castle.out","w",stdout); scanf("%lld%lld",&n,&k); long long x = mypow(n-k,n-k)%mod; printf("%lld",mypow(k,k-1)*mypow(n-k,n-k)%mod); return 0; }
跳跃
胡乱推了一个不正确的dp
打的70分记搜,上代码。
#include<iostream> #include<cstdio> using namespace std; int n , d , f[10005][10005] , maxn , val[10005]; inline int mymax(int a , int b) { return a>b?a:b; } int dfs(int u , int len) { if(u>maxn) return 0; int t = 0; t = mymax(t , f[u+len][len]?f[u+len][len]:f[u+len][len]=dfs(u+len,len)); t = mymax(t , f[u+len+1][len+1]?f[u+len+1][len+1]:f[u+len+1][len+1]=dfs(u+len+1,len+1)); if(len>1) t = mymax(t , f[u+len-1][len-1]?f[u+len-1][len-1]:f[u+len-1][len-1]=dfs(u+len-1,len-1)); return f[u][len]=t+val[u]; } int main() { freopen("jump.in","r",stdin); freopen("jump.out","w",stdout); scanf("%d%d",&n,&d); for(int i=1; i<=n; i++) { int x; scanf("%d",&x); val[x]++; maxn = mymax(maxn , x); } printf("%d",dfs(d , d)); return 0; }阅读更多
相关文章推荐
- NOIP模拟题 kun 栈 贪心 解题报告
- Noip模拟题解题报告
- Noip模拟题解题报告
- 2016.9.3测试解题报告(NOIP2014 day1 day2)
- NOIP 2008 解题报告(笨小猴,火柴棒等式,传纸条,双栈排序)
- NOIP2013提高组复赛 转圈游戏 解题报告
- JZOJ.4300[NOIP2015模拟11.3]装饰大楼 解题报告
- NOIP 2006年解题报告
- noip2013普及组解题报告
- NOIP欢乐模拟赛 T2 解题报告
- 20161004 NOIP 模拟赛 T1 解题报告
- 解题报告 NOIP2015 子串
- 20161005 NOIP 模拟赛 T3 解题报告
- 20161003 NOIP 模拟赛 T2 解题报告
- NOIP欢乐模拟赛 T3 解题报告
- NOIP2008 普及组T1 ISBN号码 解题报告-S.B.S.
- [NOIP2007] Hanoi双塔问题-解题报告
- 9月24日noip模拟赛解题报告
- NOIP 2003 神经网络 解题报告
- NOIP 2009 靶形数独 解题报告