UVa 10306 - e-Coins
来源:互联网 发布:ftp上传软件绿色版 编辑:程序博客网 时间:2024/05/13 12:14
题目:有m个钱币,有两种价值(xi,yi),现在要求组成面值sum(x)^2+sum(y)^2=s^2的最少硬币数。
分析:dp,二维安全背包。和以为背包相同,只是容量现在是二维的,按递增序枚举两个容量即可;
求解时,枚举所有x^2+y^2=s^2的x和y,取最小即可。
说明:最近开始练习dp(⊙_⊙)。
#include <iostream>#include <cstdlib>#include <cstdio>using namespace std;int x[42],y[42];int dp[302][302];int main(){int n,m,s;while (cin >> n)while (n --) {cin >> m >> s;for (int i = 0 ; i <= s ; ++ i)for (int j = 0 ; j <= s ; ++ j)dp[i][j] = 100000; for (int i = 1 ; i <= m ; ++ i) {cin >> x[i] >> y[i];dp[x[i]][y[i]] = 1;}for (int i = 1 ; i <= m ; ++ i)for (int j = x[i] ; j <= s ; ++ j)for (int k = y[i] ; k <= s ; ++ k)if (dp[j][k] > dp[j-x[i]][k-y[i]]+1)dp[j][k] = dp[j-x[i]][k-y[i]]+1;int max = 100000;for (int i = 0 ; i <= s ; ++ i)for (int j = 0 ; j <= s ; ++ j)if (i*i+j*j == s*s && max > dp[i][j])max = dp[i][j];if (max == 100000)printf("not possible\n");else printf("%d\n",max);}return 0;}
0 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(二维完全背包)
- setsockopt函数--设置connect超时
- Java @override报错的解决方法
- 音视频技术哪个开发包更好
- 细说PHP编程误区
- duilib底层机制剖析:窗体类与窗体句柄的关联
- UVa 10306 - e-Coins
- PHP获取字符串的第一个中文的首字母
- 嵌入式 iptables防火墙应用实例
- JS的delete操作
- storm运行过程中UI页面出现Connection refused错误
- Socket_编程_参考
- 北京公安 生活管家APP
- 内存映射文件原理探索
- 第2天. 系统构架师之路之之apache tomcat https应用