package beibao01;
import java.util.Scanner;
public class p1832 {
static int b[]=new int[1005],count[]=new int[1005];
static int p=0;
public static void main(String[] args) {
Scanner inner=new Scanner(System.in);
int t=0;
int n;int dp[][]=new int[1005][1005];
n=inner.nextInt();
yushu(n);
for(int i=0;i<p;i++) {
for(int j=n;j>=count[i];j--) {
dp[i][j]=Math.max(dp[i-1][j], dp[i][j-n]+count[i]);
}
if(dp[i][n]==n) {
t++;
}
}
System.out.print(t);
}
public static void yushu(int a) {
for(int i=0;i<a+1;i++) {
b[i]=1;
}
b[0]=0;b[1]=0;
for(int i=1;i<=a;i++) {
count[p]=i;
for(int j=2*i;j<=a;j+=i) {
b[j]=0;
}
p++;
}
}
}
问题提示:Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1
package com.test;
import java.util.Scanner;
public class ArrayTest {
static int b[]=new int[1005],count[]=new int[1005];
static int p=0;
public static void main(String[] args) {
Scanner inner=new Scanner(System.in);
int t=0;
int n;
int dp[][]=new int[1005][1005];
n=inner.nextInt();
yushu(n);
for(int i=0;i<p;i++) {
for(int j=n;j>=count[i];j--) {
dp[i][j]=Math.max(dp[i][j], dp[i][n-j]+count[i]);// 这里的改动,
}
if(dp[i][n]==n) {
t++;
}
}
System.out.print(t);
}
public static void yushu(int a) {
//目的是设置在数组b中存入指定数量元素前两个是0.剩下的是1
for(int i=0;i<a+1;i++) {
b[i]=1;
}
b[0]=0;b[1]=0;
for(int i=1;i<=a;i++) {
count[p]=i;
for(int j=2*i;j<=a;j+=i) {
b[j]=0;
}
p++;
}
}
}