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;
} }

  

topcoder srm 325 div1的更多相关文章

  1. Topcoder SRM 643 Div1 250<peter_pan>

    Topcoder SRM 643 Div1 250 Problem 给一个整数N,再给一个vector<long long>v; N可以表示成若干个素数的乘积,N=p0*p1*p2*... ...

  2. Topcoder Srm 726 Div1 Hard

    Topcoder Srm 726 Div1 Hard 解题思路: 问题可以看做一个二分图,左边一个点向右边一段区间连边,匹配了左边一个点就能获得对应的权值,最大化所得到的权值的和. 然后可以证明一个结 ...

  3. topcoder srm 714 div1

    problem1 link 倒着想.每次添加一个右括号再添加一个左括号,直到还原.那么每次的右括号的选择范围为当前左括号后面的右括号减去后面已经使用的右括号. problem2 link 令$h(x) ...

  4. topcoder srm 738 div1 FindThePerfectTriangle(枚举)

    Problem Statement      You are given the ints perimeter and area. Your task is to find a triangle wi ...

  5. Topcoder SRM 602 div1题解

    打卡- Easy(250pts): 题目大意:rating2200及以上和2200以下的颜色是不一样的(我就是属于那个颜色比较菜的),有个人初始rating为X,然后每一场比赛他的rating如果增加 ...

  6. Topcoder SRM 627 div1 HappyLettersDiv1 : 字符串

    Problem Statement      The Happy Letter game is played as follows: At the beginning, several players ...

  7. Topcoder SRM 584 DIV1 600

    思路太繁琐了 ,实在不想解释了 代码: #include<iostream> #include<cstdio> #include<string> #include& ...

  8. TopCoder SRM 605 DIV1

    604的题解还没有写出来呢.先上605的. 代码去practice房间找. 说思路. A: 贪心,对于每个类型的正值求和,如果没有正值就取最大值,按着求出的值排序,枚举选多少个类型. B: 很明显是d ...

  9. topcoder srm 575 div1

    problem1 link 如果$k$是先手必胜那么$f(k)=1$否则$f(k)=0$ 通过对前面小的数字的计算可以发现:(1)$f(2k+1)=0$,(2)$f(2^{2k+1})=0$,(3)其 ...

随机推荐

  1. UGUI 打图集

    using UnityEngine; using System.Collections; using UnityEditor; using System.Collections.Generic; us ...

  2. 01JAVA语言基础课后作业

    1.问题 一个Java类文件中真的只能有一个公有类吗? 请使用Eclipse或javac检测一下以下代码,有错吗? 回答  真的只能有一个公有类 一个Java源文件中最多只能有一个public类,当有 ...

  3. python subprocess中ssh命令的特殊性

    今天尝试使用python 的 subprocess 模块 使用类似如下语句: p=subprocess.Popen(['ssh','root@localhost'],stdout=subprocess ...

  4. 准备dbcp2-2.1.1和pool2-2.4.2 、commons-dbcp-1.4jar包

    下载地址:https://pan.baidu.com/s/1gtcW36Lz6Yt-j9WlTu31Pw

  5. mysql 对表字段进行长度截取操作

    现在的问题是数据库某一个表中其中的车牌号字段有些数据多了一位,需要把它找出来然后把多的最后一位去掉..... 通过自带的length(字段名)函数把长度过长的数据过滤出来,其中,一个汉字算3个字符,一 ...

  6. Java基础语法(二 )

    五.运算符 *算术运算符 *赋值运算符 *关系运算符 *逻辑运算符 *位运算符 *三目运算符 算术运算符 *+,-,*,/都是比较简单的操作 *+的几种作用: 加法 正数 字符串连接符 *除法的时候要 ...

  7. freedom is a kind of responsibility

    张维迎教授在2017年7月1日北大国发院2017届毕业典礼上的发言<自由是一种责任> 张维迎:自由是一种责任    本文为张维迎教授在2017年7月1日北大国发院2017届毕业典礼上的发言 ...

  8. es6基本语法

    //let和const申明变量和常量 //作用域只限于当前代码块 //使用let申明的变量作用域不会提升 //在相同的作用域下不能申明相同的变量 //for循环体现let的父子作用域 二.es6的解构 ...

  9. hive 中简单的udf函数编写

    .注册函数,使用using jar方式在hdfs上引用udf库. $hive.注销函数,只需要删除mysql的hive数据记录即可. delete from func_ru ; delete from ...

  10. html5的理解

    1.良好的移动性,以移动设备为主 2.响应式设计,以适应自动变化的屏幕尺寸 3.支持离线缓存技术,webStorage本地缓存 4.新增canvas.video.audio等新标签元素,新增特殊内容元 ...