Как указать, что аргумент JVM в пользу Знатока создал исполняемый JAR

Вы можете решить эту проблему с помощью динамического программирования. Вы можете увидеть концепцию в этой ссылке (просто прочитайте раздел «Компьютерное программирование»). Он имеет следующие два шага.

  • Сначала решите проблему рекурсивно.
  • Помните состояния.
#include
using namespace std;
#define ll long long
#define mx 100005
#define mod 1000000007
int n, b;
int f[333], s[333], d[333];
int dp[251][251];
int rec(int snowPos, int bootPos)
{
    if(snowPos == n-1){
        return 0;

    int &ret = dp[snowPos][bootPos];
    if(ret != -1) return ret;
    ret = 1000000007;
    for(int i = bootPos+1; i= f[snowPos]){
            ret = min(ret, i - bootPos + rec(snowPos, i));
        }
    }
    for(int i = 1; i<=d[bootPos] && snowPos+i < n; i++){
        if(f[snowPos + i] <= s[bootPos]){
            ret = min(ret, rec(snowPos+i, bootPos));
        }
    }
    return ret;
}
int main()
{
    freopen("snowboots.in", "r", stdin);
    freopen("snowboots.out", "w", stdout);
    scanf("%d %d", &n, &b);
    for(int i = 0; i
blockquote>

Это мое решение этой проблемы (на C ++). Это просто рекурсия. Как говорит проблема,

  • вы можете изменить загрузку, или
  • вы можете сделать прыжок при текущей загрузке.

Запоминание выполняется двумерным массивом dp [] [].

7
задан Steve Kuo 11 October 2008 в 00:56
поделиться

2 ответа

Я не знаю ни о каком подобном механизме. Конфигурация JVM указана вызовом команда Java.

Вот спецификация файла банки, которая заметно не упоминает атрибута кроме Основного Класса для автономного выполнения:

http://java.sun.com/javase/6/docs/technotes/guides/jar/jar.html

4
ответ дан 7 December 2019 в 12:26
поделиться

Прежде всего позвольте мне сказать, что что-либо это хитрое, вероятно, твердо по причине.

Этот подход, который может работать на Вас, если Вам действительно нужен он. Как записано, это предполагает, что "Java" находится на пути вызывающей стороны.

Обзор:

  1. Объявите класс Bootstrapper как основной класс в декларации банки.

  2. bootstrapper порождает другой процесс, в котором мы называем Java (передающий в любых параметрах командной строки, которые Вы хотите) на "реальном" основном классе.

  3. Перенаправьте дочерние процессы System.out и System.err к соответствующим потокам bootstrapper

  4. Ожидайте дочернего процесса для окончания

Вот хорошая фоновая статья.

src/main/java/scratch/Bootstrap.java - этот класс определяется в pom.xml как mainclass банки: <mainClass>scratch.Bootstrap</mainClass>

package scratch;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintStream;

public class Bootstrap {
    class StreamProxy extends Thread {
        final InputStream is;
        final PrintStream os;

        StreamProxy(InputStream is, PrintStream os) {
            this.is = is;
            this.os = os;
        }

        public void run() {
            try {
                InputStreamReader isr = new InputStreamReader(is);
                BufferedReader br = new BufferedReader(isr);
                String line = null;
                while ((line = br.readLine()) != null) {
                    os.println(line);
                }
            } catch (IOException ex) {
                throw new RuntimeException(ex.getMessage(), ex);
            }
        }
    }

    private void go(){
        try {
            /*
             * Spin up a separate java process calling a non-default Main class in your Jar.  
             */
            Process process = Runtime.getRuntime().exec("java -cp scratch-1.0-SNAPSHOT-jar-with-dependencies.jar -Xmx500m scratch.App");

            /*
             * Proxy the System.out and System.err from the spawned process back to the user's window.  This
             * is important or the spawned process could block.
             */
            StreamProxy errorStreamProxy = new StreamProxy(process.getErrorStream(), System.err);
            StreamProxy outStreamProxy = new StreamProxy(process.getInputStream(), System.out);

            errorStreamProxy.start();
            outStreamProxy.start();

            System.out.println("Exit:" + process.waitFor());
        } catch (Exception ex) {
            System.out.println("There was a problem execting the program.  Details:");
            ex.printStackTrace(System.err);

            if(null != process){
                try{
                    process.destroy();
                } catch (Exception e){
                    System.err.println("Error destroying process: "+e.getMessage());
                }
            }
        }
    }

    public static void main(String[] args) {
        new Bootstrap().go();
    }

}

src/main/java/scratch/App.java - это - нормальная точка входа для Вашей программы

package scratch;

public class App 
{
    public static void main( String[] args )
    {
        System.out.println( "Hello World! maxMemory:"+Runtime.getRuntime().maxMemory() );
    }
}

Вызов: java -jar scratch-1.0-SNAPSHOT-jar-with-dependencies.jar Возвраты:

Hello World! maxMemory:520290304
Exit:0
2
ответ дан 7 December 2019 в 12:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: