标签:space which finally 状态 can value arm ted i++
Sample Input
2 4 -2 3 3 4 5 8
2
第一次做背包的题,感觉不是很好想...此类问题的关键在于找到状态转移方程
F[i][j]用来表示将前i个物品放上钩,使力矩为j的情况数
状态转移方程:F[i][j]=F[i][j]+F[i][j-temp] (if F[i][j-temp]>=1)
其中,temp枚举第i个物品的每一个力矩。
#include<iostream> using namespace std; int n[100], m[100]; int F[20][100000]; int main() { int C, G; scanf("%d%d", &C, &G); for (int i = 0; i < C; i++)scanf("%d", &n[i]); for (int i = 0; i < G; i++)scanf("%d", &m[i]); for (int i = 0; i < C; i++) { int temp = n[i] * m[0]; F[0][temp + 8000] = F[0][temp + 8000]+1; } for (int i = 1; i < G; i++) { for (int j = 0; j < C; j++) { int temp = n[j] * m[i]; for (int k = 0; k < 100000; k++) { if (F[i - 1][k]>=1) F[i][k + temp] = F[i][k+temp]+F[i-1][k]; } } } printf("%d", F[G - 1][8000]); }
标签:space which finally 状态 can value arm ted i++
原文地址:http://www.cnblogs.com/zhy-ang/p/6786614.html