UVA 10306 e-Coins
来源:互联网 发布:二进制转bcd码算法 编辑:程序博客网 时间:2024/05/21 17:42
可以看成三维的DP, dp[i][X][Y]表示使用前i种icon使得x总和为X且y总和为Y的所有解决方案中icon的最少数量,然后进行递推就行了,注意使用二维滚动数组来模拟三维的DP,x和y的迭代顺序都是从大到小。X和Y取值范围都是0到S
#include <stdio.h>#defineINF0x7fffffffstruct coin{int x;int y;};struct coin arr[50];int dp[350][350];void func(int m, int s){int i, x, y, k;int min_icon;for(x=s; x>=0; x--){for(y=s; y>=0; y--){if(x==0 && y==0)dp[x][y] = 0;elsedp[x][y] = -1;}}for(i=1; i<=m; i++){for(x = s; x>=0; x--){for(y = s; y>=0; y--){if(x*x + y*y > s*s){dp[x][y] = -1;continue;}for(k=1; x-k*arr[i].x>=0&&y-k*arr[i].y>=0; k++){if(dp[x-k*arr[i].x][y-k*arr[i].y]!=-1 && (dp[x-k*arr[i].x][y-k*arr[i].y]+k<dp[x][y] || dp[x][y]==-1))dp[x][y] = dp[x-k*arr[i].x][y-k*arr[i].y]+k;}}}}min_icon = INF;for(x=s; x>=0; x--){for(y=s; y>=0; y--){if(x*x+y*y==s*s && dp[x][y]!=-1 && dp[x][y]<min_icon)min_icon = dp[x][y];}}if(INF == min_icon){printf("not possible\n");}else{printf("%d\n", min_icon);}}int main(void){int n, m, i, s;//freopen("input.dat", "r", stdin);scanf("%d", &n);while(n--){scanf("%d %d", &m, &s);for(i=1; i<=m; i++){scanf("%d %d", &(arr[i].x), &(arr[i].y));}func(m, s);}}
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(二维完全背包)
- 第五次上机赛解题报告及标程
- Eclipse启动时报需要安装"Java SE 6 Runtime"致无法启动解决方案
- java中setOpaque()用法
- Java字符串处理的几个常用方法
- zabbix 安装(自己实践)
- UVA 10306 e-Coins
- 平板彩电寿数须达7年 国产巨子:不惧“经用”检测
- 爬虫:BeautifulSoup
- VM packet flow with neutron-lbaas-agent
- 研究开启大页实验
- Linux查看CPU和内存使用情况
- ffmpeg码率控制
- C#调用C++Dll封装时遇到的一系列问题
- NYOJ103大数相加