提出詳細
ソースコード
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
int asc(const void *a, const void *b) {
return *(int *)a - *(int *)b;
}
int main() {
int c;
int num;
int bud;
int pri;
int gra;
int gram[10];
int price[10];
int custom[10];
int max_g = 0;
int min_p = 99999999;
int count = 0;
int count_o = 0;
int sum_p = 0;
int sum_g = 0;
scanf("%d",&c);
scanf("%d",&num);
scanf("%d",&bud);
for(int iii=0;iii<num;iii++){
printf("Case #%d:\n",iii);
scanf("%d",&pri);
scanf("%d",&gra);
price[iii] = pri;
gram[iii] = gra;
custom[iii]= 0;
while(1 == 1){
for(int i = 0;i < num;i++){
sum_p += custom[i] * price[i];
sum_g += custom[i] * gram[i];
//printf("%d,%d,%d\n",sum_p,max_g,i);
}
if(sum_p <= bud){
if(sum_g > max_g){
max_g = sum_g;
}
if(sum_p < min_p){
min_p = sum_p;
}
}
count_o++;
count = count_o;
if(count == pow(2,num)){
break;
}
for(int i = 0;i < num;i++){
custom[i] = count % 2;
count /= 2;
}
sum_p = 0;
sum_g = 0;
//printf("%d,%d\n",sum_p,max_g);
}
printf("%d\n",max_g);
}
/*
for(int iii=1;iii<=c;iii++){
printf("Case #%d:\n",iii);
scanf("%d",&num);
num_o = num;
for(int ii = 0;ii < 4; ii++){
size[ii] = num % 10;
num /= 10;
}
qsort(size, 4, sizeof(int),asc);
n = size[3] * 1000 + size[2] * 100 + size[1] * 10 + size[0] - size[3] - size[2] * 10 - size[1] * 100 - size[0] * 1000;
n_o = n;
if(n != num_o){
count++;
}
while(1 == 1){
if(n_o == num_o){
printf("%d\n",count);
count = 0;
break;
}
for(int ii = 0;ii < 4; ii++){
size[ii] = n % 10;
n /= 10;
}
qsort(size, 4, sizeof(int),asc);
//printf("\n");
//printf("%d,%d\n",size[3] * 1000 + size[2] * 100 + size[1] * 10 + size[1],size[3] + size[2] * 10 + size[1] * 100 + size[0] * 1000);
n = size[3] * 1000 + size[2] * 100 + size[1] * 10 + size[0] - size[3] - size[2] * 10 - size[1] * 100 - size[0] * 1000;
if(n == n_o){
printf("%d\n",count);
count = 0;
break;
}
else{
n_o = n;
count++;
}
}
}*/
return 0;
}
提出情報
提出出力結果
テストケース情報
# |
状態 |
詳細情報 |
正解か誤答の場合のみ表示されます. |