1 条题解
-
0
C++ :
#include<bits/stdc++.h> using namespace std; int f[1010]={}; int c[1010]={}; int main() { int n=0; int num[10]={0,1,2,3,5,10,20};//先将砝码大小进行预处理 for (int i=1;i<=6;i++) { int k; cin>>k; for (int j=1;j<=k;j++) c[++n]=num[i]; } //转换01背包 f[0]=1; int sum=0,ans=0; for (int i=1;i<=n;i++) sum+=c[i];//求出01背包体积最大值 for (int i=1;i<=n;i++) for (int j=sum;j>=c[i];j--) f[j]+=f[j-c[i]];//DP for (int i=1;i<=sum;i++) if (f[i]) ans++;//累加所有可能出现的方案总和 cout<<"Total="<<ans; return 0; }Java :
import java.util.Scanner; public class Main { public static void main(String[] args) { // TODO Auto-generated method stub Scanner scan = new Scanner(System.in); int a[] = new int [6]; for (int i = 0; i < a.length; i++) { a[i] = scan.nextInt(); } int sum = a[0]*1 + a[1]*2 + a[2]*3 + a[3]*5 + a[4]*10 + a[5]*20; int s[] = new int[sum+1]; int m = 0; for (int i = 0; i <= a[0]; i++) { for (int j = 0; j <= a[1]; j++) { for (int j2 = 0; j2 <= a[2]; j2++) { for (int k = 0; k <= a[3]; k++) { for (int k2 = 0; k2 <= a[4]; k2++) { for (int l = 0; l <= a[5]; l++) { s[i*1 + j*2 + j2*3 + k*5 + k2*10 + l*20] = 1; } } } } } } int ans = 0; for (int i = 0; i < s.length; i++) { if(s[i] == 1) { ans++; } } System.out.println("Total="+(ans-1)); } }
- 1
信息
- ID
- 810
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者