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. node.js初识10

    post请求 form.html <!DOCTYPE html> <html lang="en"> <head> <meta charse ...

  2. animation 老动画

    关于设置跳跃: using System.Collections; using System.Collections.Generic; using UnityEngine; public class ...

  3. Git SSH密钥对生成以及多个SSH存在情况配置

    一.使用Git Bash 生成一个新的SSH密钥 1. 打开 Git Bash. 2. 邮箱设置粘贴下面的文字,替换成为你自己的邮箱. Github SSH 1 $ ssh-keygen -t rsa ...

  4. Unity shader学习之Blinn-Phong光照模型

    Blinn-Phong光照模型不用计算反射方向,计算公式如下: h = normalize(v + l); Cspecular = Clight * mspecular * pow(max(0, do ...

  5. JavaScript--定时器setTimeout()、clearTimeout(var param)和setInterval()、clearInterval(var param)

    1.setTimeout().clearTimeout(var param) setTimeout() 方法用于在指定的毫秒数后调用函数或计算表达式,只调用一次 clearTimeout() 方法可取 ...

  6. Spark学习之路 (十三)SparkCore的调优之资源调优JVM的基本架构

    一.JVM的结构图 1.1 Java内存结构 JVM内存结构主要有三大块:堆内存.方法区和栈. 堆内存是JVM中最大的一块由年轻代和老年代组成,而年轻代内存又被分成三部分,Eden空间.From Su ...

  7. zookeeper日志清理

    环境 Red Hat Enterprise Linux Server release 7.3 (Maipo) jdk1.7.0_80      zookeeper-3.4.11 一.事务日志和快照日志 ...

  8. spring boot: ConfigurationProperties

    读取配置信息 1.5 之前 @Component @ConfigurationProperties(prefix = "user", locations= {"class ...

  9. PYQT5学习笔记之各模块介绍

    Qtwidgets模块包含创造经典桌面风格的用户界面提供了一套UI元素的类 Qtwidegts下还有以下常用对象,所以一般使用Qtwidegts时会使用面向对象式编程 QApplication: ap ...

  10. <转>jmeter(十六)配置元件之计数器

    本博客转载自:http://www.cnblogs.com/imyalost/category/846346.html 个人感觉不错,对jmeter讲解非常详细,担心以后找不到了,所以转发出来,留着慢 ...