topcoder srm 325 div1
problem1 link
$g[i]$表示解决前$i$个的代价,那么$g[i]$是所有$g[j]+cost(j+1,i)$的最小值。
import java.util.*;
import java.math.*;
import static java.lang.Math.*;public class FenceRepairing {public double calculateCost(String[] boards) {StringBuilder builder=new StringBuilder();for(int i=0;i<boards.length;++i) {builder.append(boards[i]);}final String s=builder.toString();final int n=s.length();int[] f=new int[n+1];f[0]=0;for(int i=1;i<=n;++i) {f[i]=f[i-1];if(s.charAt(i-1)=='X') {++f[i];}}double[] g=new double[n+1];g[0]=0;for(int i=1;i<=n;++i) {g[i]=g[i-1];if(f[i]-f[i-1]!=0) {g[i]+=1;}for(int j=0;j<i;++j) {double t=g[j];if(f[i]-f[j]>0) {t+=Math.sqrt(i-j);}if(t<g[i]) {g[i]=t;}}}return g[n];}
}
problem2 link
分别讨论$X$的取值区间即可。
import java.util.*;
import java.math.*;
import static java.lang.Math.*;public class ModularInequality {public int countSolutions(int[] A, int P) {Arrays.sort(A);int result=0;final int n=A.length;long sum=0;for(int x:A) {sum+=x;}if(sum>=P) {long k=(sum-P+n-1)/n;if(k<A[0]) {result+=A[0]-k;}}else {long k=(sum-P)/n;if(k<A[0]) {result+=A[0]-k;}}if(P+sum>=0) {long k=(P+sum)/n;if(A[n-1]<=k) {result+=k-A[n-1]+1;}}else {long k=(P+sum-(n-1))/n;if(A[n-1]<=k) {result+=k-A[n-1]+1;}}long pre=0;for(int i=1;i<n;++i) {pre+=A[i-1];sum-=A[i-1];if(A[i]==A[i-1]) {continue;}long aa=P-(sum-pre);long bb=i+i-n;if(bb==0) {if(aa>=0) {result+=A[i]-A[i-1];}}else if(bb<0) {long k=-1;if(aa<0) {k=aa/bb;if(aa%bb!=0) {++k;}}else if(aa==0) {k=0;}else {k=aa/bb;}if(k<A[i]) {result+=A[i]-Math.max(A[i-1],k);}}else {long k=-1;if(aa<0) {k=aa/bb;if(aa%bb!=0) {--k;}}else if(aa==0) {k=0;}else {k=aa/bb;}if(A[i-1]<=k) {result+=Math.min(k,A[i]-1)-A[i-1]+1;}}}return result;}
}
problem3 link
从小到大依次枚举每个币种的面值。假设要求的答案为$f(n,K)$。当枚举第二种面值的时候,假设是2,那么后面所有的面值都是2的倍数,所以此时$f(n,K)=n$%$2+f(\frac{n}{2},K-1)$。
import java.util.*;
import java.math.*;
import static java.lang.Math.*;public class NewMoneySystem {public long chooseBanknotes(String N,int K) {map=new HashMap<>();return dfs(Long.valueOf(N),K);}static Map<Long,Map<Integer,Long>> map=null;long dfs(long n,int k) {if(k==1) {return n;}if(n==0) {return 0;}Map<Integer,Long> t=map.get(n);if(t==null) {t=new HashMap<>();map.put(n,t);}if(t.get(k)!=null) {return t.get(k);}long result=-1;for(int i=2;i<=5;++i) {long tmp=n%i+dfs(n/i,k-1);if(result==-1||result>tmp) {result=tmp;}}t.put(k,result);return result;}}
转载于:https://www.cnblogs.com/jianglangcaijin/p/7450441.html
topcoder srm 325 div1相关推荐
- topcoder srm 714 div1
problem1 link 倒着想.每次添加一个右括号再添加一个左括号,直到还原.那么每次的右括号的选择范围为当前左括号后面的右括号减去后面已经使用的右括号. problem2 link 令$h(x) ...
- topcoder srm 691 div1 -3
1.给定一个$n$个顶点$n$个边的图,边是$(i,a_{i})$,顶点编号$[0,n-1]$.增加一个顶点$n$,现在选出一个顶点集$M$,对于任意的在$M$中 的顶点$x$,去掉边$(x,a_{x ...
- topcoder srm 706 div1
1.给定一个迷宫,点号表示不可行,井号表示可行.现在可以改变其中的一些井号的位置.问最少改变多少个井号可以使得从左上角到右下角存在路径. 思路:设高为$n$,宽为$m$,若井号的个数$S$小于$n+m ...
- topcoder srm 694 div1 -3
1.给出$n$个数字,将其分成三个非空的组,每组的权值为该组所有数字的抑或.选择一种分法使得三组的权值和最大? 思路:记录前两组的权值且三组有没有数字时第三组的值.(当前两组的值知道时第三组的权值是确 ...
- topcoder srm 330 div1
problem1 link 直接模拟. import java.util.*; import java.math.*; import static java.lang.Math.*;public cl ...
- topcoder srm 360 div1
problem1 link (1)$n \neq m$时,假设$n<m$,那么同一行中的$m$个数字必定都相等. (2)$n=m$时,要满足任意的$i_{1},i_{2},j_{1},j_{2} ...
- topcoder srm 635 div1
problem1 link 首先枚举长度$L$.然后计算每一段长度$L$的差值最大公约数,然后差值除以最大公约数的结果可以作为当前段的关键字.然后不同段就可以比较他们的关键字,一样就是可以转化的. p ...
- topcoder srm 495 div1
problem1 link 从前向后确定一下,然后再从后向前确定一下.一样的话就是可以确定的. problem2 link 首先将强连通分量缩点.理论上来说,只需要遍历所有入度为0的联通块中的一个即可 ...
- topcoder srm 500 div1
problem1 link 如果decisions的大小为0,那么每一轮都是$N$个人.答案为0. 否则,如果答案不为0,那么概率最大的一定是一开始票数最多的人.因为这个人每一轮都在可以留下来的人群中 ...
最新文章
- Java项目:智能制造生产管理平台(java+SSM+mysql+Maven+Easyui+JSP)
- 终于!《iOS 全埋点解决方案》正式出版
- iOS中 动态启动图GIF的简单设置 韩俊强的博客
- 我是程序员,每一天都太难了!
- 【ArcGIS遇上Python】ArcGIS Python中文编码问题案例详解
- Selenium脚本编写技巧和窍门
- C/C++——一个因为unsigned引发的大问题
- 文档下载:《Oracle 20c和19c的新特性解密》
- 【华为云技术分享】Linux内核补丁源码分析(1)
- 程序员一般都浏览这些网站,不仅仅提升编程水平!
- Windows10下VB6.0开发——写入数据到文件操作
- 信息检索 IR 中的评价指标
- 最长递增子序列(LIS longest-increment-subsequence)最长连续递增子序列 最大连续子序列和
- vasp软件全名是什么_vasp软件主要功能
- Vue项目实例(一)------背景
- webrtc源码分析 nack详解
- c# webbrowser html5,C#设置WebBrowser IE浏览器版本
- 放苗机器人_机自学院苗中华教授团队在集群机器人智能控制研究方面取得重大进展...
- win10关机后自动重启_电脑自动关机或重启的解决办法
- 2023.3.5英语单词学习笔记
热门文章
- 北大组织“富豪俱乐部”,有何不可?
- Linux 下 VNC配置和使用(本机控制本机)
- Unity中如何计算带minimap的贴图资源的大小
- bzoj 4832 抵制克苏恩
- js学习总结----获取数组最大值
- CodeForces-734E Anton and Tree 树的直径
- 输出stage.displayState等于null原因
- java future设计模式
- Joint Bilateral Filtering 双边滤波
- (原創) 由一維陣列模擬二維陣列(多維陣列) (C/C++)