题解 | #判断两个IP是否属于同一子网#
称砝码
http://www.nowcoder.com/practice/f9a4c19050fc477e9e27eb75f3bfd49c
称砝码
http://www.nowcoder.com/practice/f9a4c19050fc477e9e27eb75f3bfd49c
#include<stdio.h> int main(){ int n; int *m; int *x; scanf("%d",&n); m = (int*)malloc(sizeof(int)*n); x = (int*)malloc(sizeof(int)*n); int t; for(int i=0;i<n;i++){ scanf("%d",&m[i]); } for(int i=0;i<n;i++){ scanf("%d",&x[i]); } int total = 0; for(int i=0;i<n;i++){ total = total+m[i]*x[i]; } int * wight_toal = (int*)malloc(sizeof(int)*(total+1)); // +1是考虑重量为0的情况 for(int i=0;i<total+1;i++){ wight_toal[i] = 0; // 不能用memset设置0了 } wight_toal[0] = 1; for(int i = 0;i<n;i++){ for(int j=0;j<x[i];j++){ for(int k = total;k>=0;k--){ // k表示所有可能的重量 if(wight_toal[k]==1){ // 找到最新组合的重量(类似与ip掩码中倒着找最后一个1) int next_weight = k+m[i]; // 下一个能组合的重量 wight_toal[next_weight] = 1; } } } } int N = 0; for(int i=0;i<total+1;i++){ N+=wight_toal[i]; } printf("%d",N); free(m); free(x); free(wight_toal); }
相关推荐