URAL1658. Sum of Digits(DP)
这题卡了挺久了 昨天试着用类似dfs的方法直接TLE在第二组 看了下题解,,发现s1,s2的范围是个幌子。。100位最大的s1900 s28100 觉得s1s2太大不敢开二维。。
这样就简单了 类似背包 dp[s1][s2]表示组成s2s2最少的位数 其实就是装进去多少个数字 正好把s1s2装满
把DP部分预处理之后放在外面 不然会超时
- #include <iostream>
- #include<cstdio>
- #include<cstring>
- #include<stdlib.h>
- #include<algorithm>
- using namespace std;
- #define INF 0xfffffff
- int s1,s2;
- int dp[][];
- int path[],flag;
- void dfs(int ss1,int ss2,int u,int v)
- {
- path[u] = v;
- if(flag) return ;
- int i;
- if(u==&&ss1==&&ss2==)
- {
- flag = ;
- for(i = dp[s1][s2] ; i>=; i--)
- printf("%d",path[i]);
- puts("");
- return ;
- }
- if(ss1<=||ss2<=)
- return ;
- u--;
- for(i = ; i <= ; i++)
- {
- if(ss1-i<||ss2-i*i<)
- continue;
- if(dp[ss1-i][ss2-i*i]+==dp[ss1][ss2])
- dfs(ss1-i,ss2-i*i,u,i);
- if(flag) break;
- }
- }
- int main()
- {
- int i,j,g,t;
- scanf("%d",&t);
- for(i = ; i <= ; i++)
- for(j = ; j <= ; j++)
- dp[i][j] = INF;
- dp[][] = ;
- for(i = ; i <= ; i++)
- for(j = i ; j <= ; j++)
- for(g = i*i ; g <= ; g++)
- dp[j][g] = min(dp[j][g],dp[j-i][g-i*i]+);
- while(t--)
- {
- scanf("%d%d",&s1,&s2);
- if(s1>||s2>)
- {
- printf("No solution\n");
- continue;
- }
- flag = ;
- if(dp[s1][s2]==INF||dp[s1][s2]>)
- {
- printf("No solution\n");
- }
- else
- {
- for(i =; i <= ; i++)
- {
- if(s1-i<||s2-i*i<)
- continue;
- if(dp[s1-i][s2-i*i]+==dp[s1][s2])
- dfs(s1-i,s2-i*i,dp[s1][s2],i);
- if(flag) break;
- }
- }
- }
- return ;
- }
URAL1658. Sum of Digits(DP)的更多相关文章
- URAL 1658. Sum of Digits(DP)
题目链接 隔了一年零三个月,重新刷URAL,这题挺麻烦的输出路径.输出路径挺扯的,乱写了写乱改改就A了...我本来想用很靠谱,记录每一条路径的,然后输出最小的,结果Tle,然后我使劲水水又过了一组,发 ...
- Hdu3022 Sum of Digits
Sum of Digits Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Tot ...
- HDU 1024 Max Sum Plus Plus --- dp+滚动数组
HDU 1024 题目大意:给定m和n以及n个数,求n个数的m个连续子系列的最大值,要求子序列不想交. 解题思路:<1>动态规划,定义状态dp[i][j]表示序列前j个数的i段子序列的值, ...
- CodeForces 489C Given Length and Sum of Digits... (贪心)
Given Length and Sum of Digits... 题目链接: http://acm.hust.edu.cn/vjudge/contest/121332#problem/F Descr ...
- Sum of Digits / Digital Root
Sum of Digits / Digital Root In this kata, you must create a digital root function. A digital root i ...
- ACdreamOJ 1154 Lowbit Sum (数字dp)
ACdreamOJ 1154 Lowbit Sum (数位dp) ACM 题目地址:pid=1154" target="_blank" style="color ...
- Maximum Sum of Digits(CodeForces 1060B)
Description You are given a positive integer nn. Let S(x) be sum of digits in base 10 representation ...
- Codeforces Round #277.5 (Div. 2)C——Given Length and Sum of Digits...
C. Given Length and Sum of Digits... time limit per test 1 second memory limit per test 256 megabyte ...
- CodeForces 1060 B Maximum Sum of Digits
Maximum Sum of Digits You are given a positive integer n. Let S(x)S(x) be sum of digits in base 10 r ...
随机推荐
- java新手笔记26 Frame
0.Calculater package com.yfs.javase; import java.awt.BorderLayout; import java.awt.Button; import ja ...
- XML, XPath, Xslt及解析/Parse
XML及解析/Parse "Programming with libxml2 is like the thrilling embrace of an exotic stranger.&quo ...
- 暑假集训(3)第二弹 -----Jungle Roads(Hdu1301)
问题梗概:自从上次某个acmer来设计了拉格瑞圣岛的交通路线后,岛上的酋长就相当苦恼,他发现,虽然这些修好的公路便利了岛上的 交通,并且让拉格瑞圣岛的旅游业更加兴旺,甚至他们还收到了一笔不小的国际资金 ...
- Poj 1054 The Troublesome Frog / OpenJudge 2812 恼人的青蛙
1.链接地址: http://poj.org/problem?id=1054 http://bailian.openjudge.cn/practice/2812 2.题目: 总时间限制: 10000m ...
- 快速排序算法 Quick sort
作者:jostree 转载请注明出处 http://www.cnblogs.com/jostree/p/4046189.html 首先随机选择一个轴,并调整数组内各个数字,使得比轴值大的数在轴的右边, ...
- Qt-获取主机网络信息之QNetworkAddressEntry
QNetworkAddressEntry类存储了一个网络接口所支持的一个IP地址,同时还有与之相关的子网掩码和广播地址. 每个网络接口可以包含0个或多个IP地址,这些IP地址可以分别关联一个子网掩码和 ...
- apache 工作模式
apache三种工作模式: prefork(2.4前默认)/worker/event(2.4默认)内容整理来自以下网站http://m.blog.csdn.net/article/details?id ...
- JAVA 修改 JSESSIONID
@Action("sidTest") public void sidTest() { HttpSession session = request.getSession(); Str ...
- css文本换行你所不知道的技巧
前言:这是最近翻译的一篇文章 我在header标签开头忘里边加入一个span标签的时候,有一点小问题.我总是想确保在span标签之前能够换行.明确地讲,在标签前边加入<br> 并没有什么错 ...
- php练习1——计算器
目标:输入两个数,计算两个数的和/差/积/商 程序如下:两个文件jiSuanQi.html和jiSuanQi.php 结果如下: