気に入らないときは、indentでもかますこと。
Cらしく書いたつもり。

#include <stdio.h>

/* 問題の定義 */
#define n 5 /* 品物の種類 */
#define WMAX 10 /* 重さの最大 */
static int w[n]={2,3,4,5,6}; /*各物品の重量*/
static int v[n]={4,5,8,9,11}; /*各物品の価値*/

int sum(int *p, unsigned x) { int retval = 0; for (; x; p++, x >>= 1)
if (x & 1) retval += *p; return retval; } void print(unsigned x) {
int i; int sumw = sum(w, x); int sumv = sum(v, x); for (i = 0; x;
i++, x >>= 1) if (x & 1) printf("(%d, %d) ", w[i], v[i]);
printf("%d %d\n", sumw, sumv); } int main(void) { unsigned x, best
= 0; for (x = 0; x < (1 << n); x++) { if (sum(w, x) <= WMAX &&
sum(v, x) > sum(v, best)) { best = x; print(x); } } return 0; }