完美笔试那个背包的题

输入是一个用逗号隔开的数组我也是醉了,直接用dp一直是20%,本地各种数据都试了都能过,求问下正确的解法是?

------分割线-------
public static void main(String args[]){
          Scanner reader=new Scanner(System.in);
          int x=reader.nextInt();
		
		  int[] array=new int[x];
		  for(int i=0;i<x;i++){
			array[i]=reader.nextInt(); 
		  }
		  int y=reader.nextInt();
		  System.out.println(minCoins(array,y));
		  
		  
}
这好像是官方的题解,无语了。。好像和题目的输入不太一样啊。。
全部评论
按行读入,split分割,转int。。。。真烦。。
点赞 回复 分享
发布于 2017-03-29 21:22
不知道该怎么处理它的输出输入
点赞 回复 分享
发布于 2017-03-29 21:17
#include<iostream>   #include<cstdio>   #include<algorithm>   #include<cstring>   using namespace std;   const int maxn = 10100;   int value[maxn];   int vol[maxn];   int dp[maxn][maxn];   int DP[maxn];   int main(){           int n,m;           while(scanf("%d",&n)!= -1){         memset(dp,0,sizeof(dp));           for(int i=1;i<=n;i++)               scanf("%d",&value[i]);           for(int i=1;i<=n;i++)               scanf("%d",&vol[i]);           scanf("%d", &m);         for(int i=1;i<=n;i++){               for(int j=0;j<=m;j++){ //vol容量可能为0; j 的顺序无所谓                   if(j>=vol[i])                        dp[i][j] = max(dp[i-1][j] , dp[i-1][j-vol[i]] + value[i]);                   else                       dp[i][j] = dp[i-1][j];               }           }           printf("%d\n",dp[n][m]);           }       return 0;   }  
点赞 回复 分享
发布于 2017-03-29 21:09
+1,完全背包和输出-1一个分数
点赞 回复 分享
发布于 2017-03-29 21:09

相关推荐

点赞 评论 收藏
分享
03-11 21:46
西北大学 Java
河和静子:这只是实习工资,我学长北大通班博一的,他同学被这家天天发邮件让他去实习,一个月10w
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务