UVA - 10306 e-Coins
来源:互联网 发布:现货白银看盘软件 编辑:程序博客网 时间:2024/05/24 03:24
题意:给你n个硬币,每个硬币有两个值x,y,求最少的组合使得(x1+x2..)^2 + (y1+y2...)^2 = m^2,令dp[i][j]代表凑出x总和为i,y总和为j的最少组合,然后就是找出最小的满足要求,不知道为什么用memset(dp,INF,sizeof(dp))会出错
#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int MAXN = 505;const int INF = 1<<20;struct node{ int x,y;}coin[MAXN];int dp[MAXN][MAXN];int main(){ int t,n,m; scanf("%d",&t); while (t--){ scanf("%d%d",&n,&m); for (int i = 0; i <= m; i++) for (int j = 0; j <= m; j++) dp[i][j] = INF; for (int i = 0; i < n; i++) scanf("%d%d",&coin[i].x,&coin[i].y); int ans = INF; dp[0][0] = 0; for (int i = 0; i < n; i++){ int x = coin[i].x; int y = coin[i].y; for (int j = x; j <= m; j++) for (int k = y; k <= m; k++) if (dp[j-x][k-y] != INF) dp[j][k] = min(dp[j][k],dp[j-x][k-y]+1); } for (int i = 0; i <= m; i++) for (int j = 0; j <= m; j++) if (dp[i][j] != INF && i*i+j*j == m*m && ans > dp[i][j]) ans = dp[i][j]; if (ans == INF) printf("not possible\n"); else printf("%d\n",ans); } return 0;}
- uva 10306 e-Coins
- UVA 10306 e-Coins
- uva 10306 e-Coins
- UVa 10306 - e-Coins
- UVA - 10306 e-Coins
- UVa:10306 e-Coins
- UVA 10306 e-Coins
- uva 10306 - e-Coins
- UVa 10306 - e-Coins
- UVA - 10306 e-Coins
- UVA - 10306 e-Coins
- UVA - 10306 e-Coins
- UVA 10306 - e-Coins
- uva 10306 - e-Coins
- UVA 10306--e-Coins+dp
- UVA 10306 - e-Coins(完全背包)
- uva 10306 - e-Coins(完全背包)
- uva 10306 e-Coins(二维完全背包)
- ffmpeg在windows下视频采集
- android中各种img文件的作用以及系统启动过程
- Hdu 4738 Caocao's Bridges (有重边无向图求桥)
- PHP使用mysqli扩展库实现增删改查(面向对象版)
- Windows Server 2012正式版RDS系列⒃
- UVA - 10306 e-Coins
- Android程序的安全系统--以root权限进行操作
- 顺序表的插入
- Windows Server 2012正式版RDS系列⒄
- 模拟U盘
- 找出一个字符串里面出现最多次数的字母以及次数
- 安装maya提示Command line option syntax error
- Java基础环境变量的配置
- HIH