1 条题解
-
0
C++ :
/* author :hzoi_ztx title : ALG : comment : [2014 10 11 test] */ #include <cstdio> #define maxn 220 #define maxm 30 #define maxc 999 int n , m ; int f[maxn][maxm][maxc] = {0} ; bool flag[maxn][maxm][maxc] = {0} ; int a[maxn] = {0} , b[maxn] = {0} ; inline int F(int x) { return x+450 ; } inline int max(const int a , const int b) {if (a>b) return a ;return b ;} int main() { //#define READ #ifdef READ freopen("candy.in" ,"r",stdin ) ; freopen("candy.out","w",stdout) ; #endif scanf("%d%d", &n , &m ) ; if (!n) { printf("0\n0\n") ; return 0 ; } int i , j , c , t1 , t2 ; for (i = 1 ; i <= n ; i ++ ) { scanf("%d%d", &t1 , &t2 ) ; a[i] = t1+t2 ; b[i] = t1-t2 ; } flag[0][0][F(0)] = true ; for (i = 0 ; i < n ; i ++ ) { j = i ; if (j>m)j = m ; for ( ; j >= 0 ; j -- ) { for (c = F(-400) ; c <= F(400) ; c ++ ) { if (flag[i][j][c]) { flag[i+1][j][c] = true ; flag[i+1][j+1][c+b[i+1]] = true ; if (f[i][j][c] > f[i+1][j][c]) f[i+1][j][c] = f[i][j][c] ; if (f[i][j][c]+a[i+1] > f[i+1][j+1][c+b[i+1]]) f[i+1][j+1][c+b[i+1]] = f[i][j][c]+a[i+1] ; } } } } for (c = 0 ; c <= 400 ; c ++ ) { if (flag[n][m][F(c)]) { if (flag[n][m][F(-c)] && f[n][m][F(-c)]>f[n][m][F(c)]) printf("%d\n%d\n",-c,f[n][m][F(-c)]) ; printf("%d\n%d\n",c,f[n][m][F(c)]) ; break ; } if (flag[n][m][F(-c)]) { printf("%d\n%d\n",-c,f[n][m][F(-c)]) ; break ; } } return 0 ; }
- 1
信息
- ID
- 1219
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者