题目地址:http://poj.org/problem?id=1170
Description

Input
Output
Sample Input
2 7 3 2 8 2 5 2 1 7 3 5 2 7 1 8 2 10
Sample Output
14
谨以此来纪念蛋疼六重循环!!!
#include <stdio.h>
#include <string.h>
#include <limits.h>
int code[6];       //商品代码
int num[6];        //商品数量
int price[6];      //商品价格
int special_num[100][6]; //促销项目各个商品数量
int special_cnt[100];    //促销项目的商品数量
int special_price[100];  //促销项目价格
int basket;              
int special;
int dp[6][6][6][6][6];
int Decode (int c){
	int i;
	for (i=1; i<=5; ++i){
		if (code[i] == c)
			break;
	}
	return i;
}
void Init(){
	int i;
	int j;
	int c;
	int k;
	int index;
	scanf ("%d", &basket);
	for (i=1; i<=basket; ++i){
		scanf ("%d%d%d", &code[i], &num[i], &price[i]);
	}
	scanf ("%d", &special);
	for (i=1; i<=special; ++i){
		scanf ("%d", &special_cnt[i]);
		for (j=1; j<=special_cnt[i]; ++j){
			scanf ("%d%d", &c, &k);
			index = Decode (c);
			special_num[i][index] = k;
		}
		scanf ("%d", &special_price[i]);
	}
}
void Lowest_Price (){
	int i1, i2, i3, i4, i5;
	int i;
	int tmp1, tmp2;
	memset (dp, -1, sizeof(dp));
	dp[0][0][0][0][0] = 0;
	for (i1=0; i1<=num[1]; ++i1){
		for (i2=0; i2<=num[2]; ++i2){
			for (i3=0; i3<=num[3]; ++i3){
				for (i4=0; i4<=num[4]; ++i4){
					for (i5=0; i5<=num[5]; ++i5){
						tmp1 = INT_MAX;
						tmp2 = INT_MAX;
						for (i=1; i<=special; ++i){
							if (i1 >= special_num[i][1] && 
								i2 >= special_num[i][2] &&
								i3 >= special_num[i][3] &&
								i4 >= special_num[i][4] &&
								i5 >= special_num[i][5]){
								tmp2 = dp[i1-special_num[i][1]]
										 [i2-special_num[i][2]]
										 [i3-special_num[i][3]]
										 [i4-special_num[i][4]]
										 [i5-special_num[i][5]] + special_price[i];
							if (tmp1 > tmp2)
								tmp1 = tmp2;
							}
						}
						if (tmp1 != INT_MAX){
							dp[i1][i2][i3][i4][i5] = tmp1;
						}
						else{
							dp[i1][i2][i3][i4][i5] = i1 * price[1] + i2 * price[2]
									+ i3 * price[3] + i4 * price[4] + i5 * price[5];
						}
					}
				}
			}
		}
	}
	printf ("%d\n", dp[num[1]][num[2]][num[3]][num[4]][num[5]]);
}
int main(void){
	Init ();
	Lowest_Price ();
	return 0;
}POJ 1170 Shopping Offers -- 动态规划(虐心的六重循环啊!!!)
原文:http://blog.csdn.net/jdplus/article/details/19827909