1 solutions
-
0
C :
#include "stdio.h" #include "string.h" int n,c; int w[10000],v[40000]; int main() { int i,j; memset(v,0,sizeof(v)); scanf("%d%d",&n,&c); for(i=0;i<n;i++) scanf("%d",&w[i]); for(i=0;i<n;i++) { for(j=c;j>=w[i];j--) { if(j==w[i]) v[j]=1; else if(v[j-w[i]]) v[j]=1; } } for(j=c;j>=0;j--) if(v[j]) { printf("%d\n",j); return 0; } return 0; }
C++ :
#include<iostream> #include<cstdio> #include<cstring> using namespace std; bool f[100000]; int n,c,x; int main(){ cin>>n>>c; memset(f,0,sizeof(f)); f[0]=true; for(int i=0;i<n;++i){ scanf("%d",&x); for(int i=c;i>=x;--i) f[i]=f[i]|f[i-x]; } for(int i=c;i>=0;--i) if (f[i]) { printf("%d",i); return 0; } }
Java :
import java.util.Arrays; import java.util.Scanner; public class Main { public static void main (String[] args) { Scanner in = new Scanner(System.in); int cnt = in.nextInt(); int c = in.nextInt(); int dp[][] = new int[cnt+1][c+1]; int data [] = new int[cnt+1]; for(int i =1;i<=cnt;i++){ data[i]=in.nextInt(); } // System.out.println(Arrays.toString(data)); for(int i =1;i<=cnt;i++) for(int j = 1;j<=c;j++){ if(j>=data[i]){ if(dp[i-1][j]>(dp[i-1][j-data[i]]+data[i])) dp[i][j] = dp[i-1][j]; else dp[i][j] = dp[i-1][j-data[i]] + data[i]; } else{ dp[i][j] = dp[i-1][j]; } } System.out.println(dp[cnt][c]); } }
- 1
Information
- ID
- 10015
- Time
- 1000ms
- Memory
- 128MiB
- Difficulty
- (None)
- Tags
- # Submissions
- 0
- Accepted
- 0
- Uploaded By